管道查找结果进入 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
这件事。
这里是一个简单的问题。 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
这件事。