Unix - 如何在文件中搜索精确的字符串
Unix - How to search for exact string in a file
我正在尝试搜索包含与另一个文件中列出的完全相同 ID 的所有文件,并将文件名放入另一个文件中。我正在使用以下命令查找文件。
grep -w -f SearchList.txt INFILES* > matched.txt
ID 列在 SearchList.txt 文件中
示例 -
450462134
747837483
352362362
INFILES 文件包含这种格式的数据-
0120171116 07:37:45:828501450462134 000001205 0120171116
07:37:45:828501747837483 000001205 0120171116
07:37:45:828501352362362 000001205
我要查找的 ID 在开头与其他文本相连,但在结尾处有一个 space。
我尝试将 \b 放在 SearchList.txt 文件中搜索文本的开头和结尾,但我仍然得到不正确的结果。
任何导致正确命令的线索都将不胜感激。
-bash-3.2$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
-bash-3.2$ grep --version
grep (GNU grep) 2.5.1
grep
的 -w
选项实际上是在模式的两端插入 \b
,你只需要在最后。一种可行的方法是将 \b
添加到具有 sed
的模式中,例如:
sed 's/$/\b/' SearchList.txt
由于您只对匹配文件名感兴趣,因此您应该将 -l
选项与 grep
一起使用。现在将它与 grep
和进程替换一起使用:
grep -lf <(sed 's/$/\b/' /path/to/SearchList.txt) INFILES*
我正在尝试搜索包含与另一个文件中列出的完全相同 ID 的所有文件,并将文件名放入另一个文件中。我正在使用以下命令查找文件。
grep -w -f SearchList.txt INFILES* > matched.txt
ID 列在 SearchList.txt 文件中 示例 -
450462134
747837483
352362362
INFILES 文件包含这种格式的数据-
0120171116 07:37:45:828501450462134 000001205 0120171116
07:37:45:828501747837483 000001205 0120171116
07:37:45:828501352362362 000001205
我要查找的 ID 在开头与其他文本相连,但在结尾处有一个 space。
我尝试将 \b 放在 SearchList.txt 文件中搜索文本的开头和结尾,但我仍然得到不正确的结果。
任何导致正确命令的线索都将不胜感激。
-bash-3.2$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
-bash-3.2$ grep --version
grep (GNU grep) 2.5.1
grep
的 -w
选项实际上是在模式的两端插入 \b
,你只需要在最后。一种可行的方法是将 \b
添加到具有 sed
的模式中,例如:
sed 's/$/\b/' SearchList.txt
由于您只对匹配文件名感兴趣,因此您应该将 -l
选项与 grep
一起使用。现在将它与 grep
和进程替换一起使用:
grep -lf <(sed 's/$/\b/' /path/to/SearchList.txt) INFILES*