我想找到包含linux下的特定字符串的文件。 我想是这样,但未能取得成功:
找 。 -name * .TXT | egrep的了mystring
我想找到包含linux下的特定字符串的文件。 我想是这样,但未能取得成功:
找 。 -name * .TXT | egrep的了mystring
在这里,你要发送的文件名(的输出find command
输入到egrep命令); 你真的想上的文件的内容运行egrep的。
这里有几个选择:
find . -name "*.txt" -exec egrep mystring {} \;
甚至更好
find . -name "*.txt" -print0 | xargs -0 egrep mystring
检查find命令帮助检查什么单一参数做。
第一种方法将产生一个新的过程对于每个文件,而第二个将通过一个以上的文件作为参数传递给egrep命令; 在-print0和-0标志需要处理潜在的讨厌的文件名(允许单独的文件名,甚至如果正确的文件名包含空格,例如)。
尝试:
find . -name '*.txt' | xargs egrep mystring
有两个问题与您的版本:
首先 , *.txt
将首先由外壳扩展,使您的文件的列表中,结束在当前目录中.txt
,所以举例来说,如果你有以下几点:
[dsm@localhost:~]$ ls *.txt
test.txt
[dsm@localhost:~]$
您find
命令会变成find . -name test.txt
find . -name test.txt
。 刚刚尝试以下说明:
[dsm@localhost:~]$ echo find . -name *.txt
find . -name test.txt
[dsm@localhost:~]$
其次 , egrep
不带文件名从STDIN
。 将它们转换为参数,你需要使用xargs
find . -name *.txt | egrep mystring
这将无法正常工作egrep
将搜索mystring
所产生的输出中find . -name *.txt
find . -name *.txt
这只是路径*.txt
文件。
相反,你可以使用xargs
:
find . -name *.txt | xargs egrep mystring
你可以使用
find . -iname *.txt -exec egrep mystring \{\} \;
这里,将返回的所有文件路径的例子*.log
具有与开头的行文件ERROR
:
find . -name "*.log" -exec egrep -l '^ERROR' {} \;
有一个从egrep的,你可以使用递归选项
egrep -R "pattern" *.log
如果你只想要的文件名:
find . -type f -name '*.txt' -exec egrep -l pattern {} \;
如果你想要的文件名和比赛:
find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;