如何列出具有特定内容的.txt文件?

如何列出具有特定内容的.txt文件?

如何列出所有 .txt 文件及其完整路径,其中包含单词“Ubuntu”。忽略非文本文件。比较值时,您应该忽略大小写,即 UBUNTU 或 ubuNtu 或 UbUnTu 被视为等于给定的搜索短语。

答案1

GNU grep 支持基于 glob 模式的递归搜索,例如:

grep --include='*.txt' -ril ubuntu /path/to/dir

如果您不搜索正则表达式,那么如果包含固定字符串匹配 ( -F),此过程会快得多。另一个优化是删除ignore-case ( -i)(如果您知道不需要)。

答案2

简单的find+grep解决方案:

find . -type f -name "*.txt" -exec grep -li --binary-files=without-match 'ubuntu' {} \;

grep细节:

  • l- 抑制正常输出;相反,打印通常会打印输出的每个输入文件的名称
  • i- 忽略大小写区别,以便仅大小写不同的字符彼此匹配

答案3

该实用程序的某些实现grep有一个-I标志可以grep忽略二进制文件。您还可以使用-i不区分大小写的匹配以及-F与固定字符串(而不是正则表达式)进行匹配。如果您正在寻找单独的您将需要使用-w某些grep实现所具有的功能。然后,要递归到子目录,您可能需要使用-R递归搜索文件并-l获取包含模式匹配项的文件的名称。然后我们想使用--includeif 我们有 GNUgrep来只查看具有特定扩展名的文件。

grep -Fil -IRw --include='*.txt' 'ubuntu' /path/to/top/dir

使用的标准选项:-F-i-l

使用的非标准选项(某些grep实现支持):-w, -I, -R, --include


使用findOpenBSDgrep哪个没有--include,哪个使用--binary-files代替-I(GNUgrep也有这个标志):

find /path/to/top/dir -type f -name '*.txt' \
    -exec grep -Fil -w --binary-files=without-match 'ubuntu' {} +

答案4

这是我通常使用的:

find /path/to/top/dir -type f -name '*.txt' -exec grep -iHI ubuntu {} \;

相关内容