【问题标题】:Search for strings in files and report which strings DO NOT exist在文件中搜索字符串并报告哪些字符串不存在
【发布时间】:2014-06-22 06:29:13
【问题描述】:

我有一长串短字符串和一长串要搜索的文本文件(实际上是要搜索的文件的嵌套文件夹)。我需要知道哪些测试字符串不存在于任何文件中。

有很多方法可以在文件中查找字符串并报告它们的位置(例如,FINDSTR),但我还没有找到一种方法来仅列出找不到的字符串。

【问题讨论】:

    标签: string file search


    【解决方案1】:

    看起来您在 Windows 中。在 Unix 中很容易做到这一点,但这并不一定是障碍。

    您需要与 Bourne 兼容的 shell(/sh、/ksh、/bash、/zsh 等)、grep 和测试。您可以去寻找前面的本机 Windows 版本,或者使用这些软件包安装最低限度的 Cygwin。我推荐后者,因为让这些部分一起工作更简单。

    在 sh 中运行这个命令:

    for each in `cat /path/to/list_of_strings.txt` ; do
        grep --silent $each `cat /another/path/to/list_of_files.txt`
        if [ $? -eq 1 ]; then
            echo $each
        fi
    done
    

    如果您在安装 Cygwin 之后觉得不舒服,您可以随时将其删除。

    【讨论】:

    • 谢谢,我试试看。是否可以给它一个要搜索的文件目录而不是文本列表?我最初的问题措辞不佳。
    • 我想我在这里找到了后续跟进的答案:stackoverflow.com/questions/4121803/…
    • 如果有帮助,您能接受我的回答吗?非常感谢。
    • 感谢您的帮助!这正是我需要的方向。
    【解决方案2】:

    感谢 Tripp Kinetics 提供此答案的框架,但我希望能够使用内置的 Windows 命令,而不是安装新软件,因为我将把它分发给我们团队的其他人。经过一番研究,我得出了以下结论:

    SET SEARCH_COUNT=0
    SET FOUND_COUNT=0
    SET NOT_FOUND_COUNT=0
    
    FOR /F "tokens=1" %%G IN (list_of_strings.txt) DO (
        ECHO | SET /P unusedVar=Looking for %%G... 
    
        FINDSTR /ISPL /C:%%G "folder_to_search\*.*" >nul 2>&1
    
        IF ERRORLEVEL 1 (
            ECHO Not found
            SET /A NOT_FOUND_COUNT=NOT_FOUND_COUNT+1
            ECHO %%G >> not_found.txt
        ) ELSE (
            ECHO Found!
            SET /A FOUND_COUNT=FOUND_COUNT+1
            ECHO %%G >> found.txt
        )
    
        SET /A SEARCH_COUNT=SEARCH_COUNT+1
    )
    
    ECHO(
    ECHO Search complete.
    ECHO(
    ECHO Looked for %SEARCH_COUNT% strings
    ECHO %FOUND_COUNT% found
    ECHO %NOT_FOUND_COUNT% not found
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多