我有一长串短字符串和一长串要搜索的文本文件(实际上是要搜索的文件的嵌套文件夹)。我需要知道哪个测试字符串不存在于任何文件中。
有很多方法可以在文件中查找字符串并报告它们的位置(例如,FINDSTR),但我还没有找到一种方法来只列出不能列出的字符串被发现。
答案 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