Shell
如何對有空格的 grep 輸出執行 xargs grep?
我正在根據正則表達式搜尋文件,然後嘗試在這些文件中搜尋內容。所以,例如,我有類似的東西
#Find all C++ files that match a certain pattern and then search them find . -name "*.cpp" | grep "<name regex>" | xargs grep "<content regex>"
我遇到的問題是某些路徑中有空格,這使
xargs
. 我知道如果我只是使用find
,我可以使用-print0
參數(連同-0
參數 onxargs
)來防止 xargs 將空格視為分隔符。有沒有類似的東西grep
?還是我完全以錯誤的方式解決了這個問題?天真地,
find
togrep
toxargs grep
對我來說很有意義,但我對產生相同結果的其他方法持開放態度。
也許使用這樣的東西(如果 gnu grep)。
grep -r 'content pattern' --include==*.cpp
男人 grep
–include=GLOB 僅搜尋其基本名稱與 GLOB 匹配的文件(使用萬用字元匹配,如 –exclude 中所述)
另請參閱空分隔符的選項。
-Z, –null 輸出一個零字節(ASCII NUL 字元)而不是通常跟在文件名後面的字元。例如, grep -lZ 在每個文件名之後輸出一個零字節,而不是通常的換行符。此選項使輸出明確,即使存在包含不尋常字元(如換行符)的文件名。此選項可與 find -print0、perl -0、sort -z 和 xargs -0 等命令一起使用,以處理任意文件名,即使是那些包含換行符的文件名。
-z, –null-data 將輸入視為一組行,每行都以零字節(ASCII NUL 字元)而不是換行符結尾。與 -Z 或 –null 選項一樣,此選項可與 sort -z 等命令一起使用以處理任意文件名。