在文件中搜索字符串并报告哪些字符串不存在

时间:2014-05-05 20:25:41

标签: string file search

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

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

2 个答案:

答案 0 :(得分:1)

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

你需要一个与Bourne兼容的shell(/ sh,/ ksh,/ bash,/ zsh等),grep和test。你可以去寻找前面的本机Windows版本,或者用这些软件包安装一个最低限度的Cygwin。我推荐后者,因为它可以更简单地使各个部分协同工作。 http://www.cygwin.com/

在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之后安装,您可以随时将其删除。

答案 1 :(得分:0)

感谢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