【问题标题】:Unix - How to search for exact string in a fileUnix - 如何在文件中搜索确切的字符串
【发布时间】:2018-09-27 01:17:45
【问题描述】:

我正在尝试搜索包含与另一个文件中列出的完全相同的 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 在开头与其他文本结合,但在结尾有一个空格。

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

【问题讨论】:

  • edit 您的问题,以根据您发布的示例输入显示预期输出。目前尚不清楚您是否正在寻找与数字匹配的行,或者与它们匹配的单词,或者如果它们匹配或不匹配则只是是/否或其他内容。此外,按照格式化代码的方式格式化输入和输出。
  • 当您的 SearhList.txt 中有 120171116000012052134 之类的条目时,它们应该与第一行匹配还是您有其他要求?

标签: unix grep full-text-search


【解决方案1】:

grep-w 选项实际上在模式的两端插入 \b,您只希望它在末尾。一种可行的选择是将\b 添加到带有sed 的模式中,例如:

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

由于您只对匹配文件名感兴趣,您应该使用-l 选项和grep。现在将它与grep 和进程替换一起使用:

grep -lf <(sed 's/$/\\b/' /path/to/SearchList.txt) INFILES*

【讨论】:

  • 感谢您的解释。它非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 2022-01-23
  • 2023-03-13
  • 2012-07-21
  • 2015-01-09
  • 1970-01-01
  • 2020-02-01
相关资源
最近更新 更多