1

我正在尝试搜索包含与另一个文件中列出的完全相同的 id 的所有文件,并将文件名放在另一个文件中。我正在使用以下命令来查找文件。

grep -w -f SearchList.txt INFILES* > matched.txt

id 列在 SearchList.txt 文件示例中 -

450462134
747837483
352362362

INFILES 文件包含这种格式的数据——

0120171116 07:37:45:828501 450462134 000001205 0120171116
07:37:45:828501 747837483 000001205 0120171116
07:37:45:8328501 302001 3020300206

我正在寻找的 id 在开头与其他文本结合在一起,但在结尾处有一个空格。

我尝试将 \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
4

1 回答 1

2

在模式的两端实际插入的-w选项,你只想要它在最后。一种可行的选择是添加到模式中,例如:grep\b\bsed

sed 's/$/\\b/' SearchList.txt

由于您只对匹配文件名感兴趣,因此您应该使用-l带有grep. 现在将其grep与过程替换一起使用:

grep -lf <(sed 's/$/\\b/' /path/to/SearchList.txt) INFILES*
于 2018-09-26T17:17:45.797 回答