我有一個要求打印包含文本的所有文件名和行號。找到並grep並打印文件名和行號
find . -name '*.cpp' -exec grep -n 'HELLO' {} \; > output.txt
但它只打印內容和行號而不是文件名。如何實現它?我正在Solaris上做。
我有一個要求打印包含文本的所有文件名和行號。找到並grep並打印文件名和行號
find . -name '*.cpp' -exec grep -n 'HELLO' {} \; > output.txt
但它只打印內容和行號而不是文件名。如何實現它?我正在Solaris上做。
你需要一個更grep的說法:
-H, --with-filename
Print the filename for each match.
我沒有看到一個方法來排除在grep的輸出匹配的文本。您可能需要再次過濾輸出。
不幸的是,這是一個非標準選項,因此可能無法使用。 –
solaris'grep支持那些參數? – 1010
你爲什麼不使用的 「grep」 「-r」 選項,查找裏面的文件:
find . -name '*.cpp' -exec awk '/HELLO/ { print FILENAME, NR }' {} + > output.txt
每當:
find . -name '*.cpp' | grep -n -r HELLO > output.txt
這裏使用的AWK代替grep的一個選項該模式被匹配,文件名和行號被打印出來。我已經使用了-exec {} +
,以便多個文件名作爲參數傳遞給awk的單個調用,如果您有大量要搜索的文件,這應該會更快。
如果您的grep不支持-H
選項(Solaris 10上的greps不支持),典型的解決方法是將文件/dev/null
添加到grep的命令行中。該文件不會匹配任何內容,但由於命令行中有兩個或更多文件,因此grep將在其輸出中顯示文件名。
find . -name '*.cpp' -exec grep -n 'HELLO' /dev/null {} \; > output.txt
你可以嘗試
grep -n 'HELLO' `find . -name '*.cpp'` > output.txt
我無法測試它在Solaris上,所以我不知道它會工作。
讓grep查找2個文件。我通常使用/ etc/passwd,但/ dev/null更好:
find . -name '*.cpp' -exec grep -n 'HELLO' {} /dev/null \; > output.txt
你想要的內容,還是隻有文件名? –
只有行號和文件名。 – CrazyC
您是否需要遞歸搜索,或者是當前目錄中的所有文件? –