管道查找结果进入 grep 不产生任何结果

Pipe find results into grep producing no results

这里是一个简单的问题。 find -L . -path "*/lef/*.lef" | grep MACRO 没有结果。但是,find -L . -path "*/lef/*.lef" 给出了结果,运行 grep MACRO 给出了 returns 匹配的结果之一。这里出了什么问题?

find returns 文件名列表。您将此列表通过管道传输到 grep,所以您实际做的是检查是否

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

(或任何 find returns)包含字符串 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 这件事。