管道查找结果到grep产生没有结果

时间:2016-01-14 15:28:07

标签: grep find pipe

这里的简单问题。 value1 = value1 + value2没有结果。但是,find -L . -path "*/lef/*.lef" | grep MACRO会给出结果,并在其中一个结果返回匹配项上运行find -L . -path "*/lef/*.lef"。这里出了什么问题?

1 个答案:

答案 0 :(得分:2)

find返回文件名列表。您将此列表管道传输到grep,因此您实际执行的操作是检查是否

./lef/sc9mcpp84_14lpp_custom_hvt_c16.lef
./lef/sc9mcpp84_14lpp_custom_hvt_c17.lef
./lef/sc9mcpp84_14lpp_custom_hvt_c18.lef

(或任何find返回)包含字符串MACRO。它没有,所以你没有得到结果。

另一方面,

grep MACRO ./lef/sc9mcpp84_14lpp_custom_hvt_c16.lef检查在文件中是否找到了MACRO。 make grep查看文件内容而不是文件名,您可以使用xargs

find -L . -path "*/lef/*.lef" | xargs grep MACRO

或者您可以告诉find您想对其结果做些什么:

find -L . -path "*/lef/*.lef" -exec grep MACRO {} \+

如果您想使用xargs并确保正确处理奇怪的文件名(包含空格),您可以使用-print0

find -L . -path "*/lef/*.lef" -print0 | xargs -0 grep MACRO

用空字符而不是换行符分隔文件名; -0选项告诉xargs。{/ p>