如何使用egrep查找包含字符串的文件

时间:2009-09-01 13:52:25

标签: linux find grep

我想在linux下找到包含特定字符串的文件。 我尝试了类似但不能成功的事情:

找到。 -name * .txt | egrep mystring

7 个答案:

答案 0 :(得分:12)

在这里,您要将文件名(find command的输出)作为输入发送到egrep;你真的想在文件的内容上运行egrep。

以下是两种选择:

find . -name "*.txt" -exec egrep mystring {} \;

甚至更好

find . -name "*.txt" -print0 | xargs -0 egrep mystring

检查find command help以检查单个参数的作用 第一种方法将为每个文件生成一个新进程,而第二种方法将多个文件作为参数传递给egrep;需要-print0和-0标志来处理可能讨厌的文件名(例如,即使文件名包含空格,也允许正确分隔文件名)。

答案 1 :(得分:2)

尝试:

find . -name '*.txt' | xargs egrep mystring

您的版本存在两个问题:

首先*.txt将首先由shell进行扩展,为您提供当前目录中以.txt结尾的文件列表,例如,如果您有以下内容:

[dsm@localhost:~]$ ls *.txt
test.txt
[dsm@localhost:~]$ 

您的find命令将变为find . -name test.txt。试试以下内容来说明:

[dsm@localhost:~]$ echo find . -name *.txt
find . -name test.txt
[dsm@localhost:~]$ 

其次egrep不会从STDIN获取文件名。要将它们转换为参数,您需要使用xargs

答案 2 :(得分:1)

find . -name *.txt | egrep mystring

这不会起作用,因为egrep会在mystring生成的输出中搜索find . -name *.txt,这只是*.txt文件的路径。

相反,您可以使用xargs

find . -name *.txt | xargs egrep mystring

答案 3 :(得分:1)

您可以使用

find . -iname *.txt -exec egrep mystring \{\} \;

答案 4 :(得分:1)

以下示例将返回所有*.log个文件的文件路径,这些文件的行以ERROR开头:

find . -name "*.log" -exec egrep -l '^ERROR' {} \;

答案 5 :(得分:1)

有一个来自egrep的递归选项,你可以使用

egrep -R "pattern" *.log

答案 6 :(得分:1)

如果您只想要文件名:

find . -type f -name '*.txt' -exec egrep -l pattern {} \;

如果你想要文件名和匹配:

find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;