2012-06-01 21 views
4

我想在bash上對搜索foobar這個詞的文件夾執行grep。然後我想要輸出所有匹配,其中文件名稱行號其中發現了事件。這可能嗎?grep在bash中獲取匹配文本的文件名和行號

我需要的輸出看起來像:

{{filename}}:{{line_number}} - {{matched_text}} 
+4

你讀過手冊頁'grep'? – chepner

+0

我有,但顯然我一定錯過了什麼...照顧開導我? –

+0

您需要-n和-r選項。 – chepner

回答

9
grep -nrH 'regex' /dir/ 

-H是添加文件名的選項,-n添加行號,-r是遞歸

我除非只有一個文件,否則即使沒有-H也可以獲得文件名。

添加-i不區分大小寫

添加-E的擴展正則表達式

1

是;嘗試: grep -nr "expression" /path/to/files/

+0

只返回行號,不包含 –

+0

中包含的文件名對不起,修改。 –

+0

您可能希望或不希望使用-r選項,具體取決於您是否希望遞歸讀取每個子目錄中的文件。 – mamills

3

使用-n或--line數選項

grep -n foobar 
+0

這隻返回行號,而不是它包含在 –

+0

中的文件的名稱我正在使用grep(GNU grep)2.5.1,它顯示了文件和行號。 – mamills

0

awk基礎的解決方案:

awk '/REGEX/{print FILENAME":"FNR" - "$0}' PATH 

對於遞歸路徑搜索,

find PATH-TO-START -type f -exec awk '/REGEX/{print FILENAME":"FNR" - "$0}' {} \;