
我使用的是 Ubuntu 16.04。
我想搜尋某個單詞,但我也希望包含該單字的整個文件在終端上輸出,以便我可以看到該單字在文件中的位置。但是,當我使用 時grep
,它只會顯示包含該單字的特定句子,而不是整個檔案。
我可以使用什麼命令來搜尋單字,同時顯示整個檔案以及該單字的位置?
答案1
與grep
您可以使用:
$ grep -E -e 'pattern' -e '$' file
或簡化形式:
$ grep -E 'pattern|$' file
從技術上講,這也可行:
$ grep -E 'pattern|^' file
甚至 :grep -E 'pattern|' file
。它表示線條有pattern
或根本沒有圖案。所以一切都會匹配。
我已grep
使用別名grep --color=always
,因此如果您沒有別名,則必須自行傳遞顏色選項。
和less
:
$ less -p 'pattern' file
因此,文件會彈出較少,所需的術語將突出顯示,您可以使用n和shift+n在匹配之間跳轉。
答案2
編輯:我誤解了原始答案中的問題...我已對其進行編輯以產生所需的結果...我只在輸出中顯示文件名。我編輯了這個答案,以使用該輸出通過 less 來顯示整個文件(正如 Ravexina 的答案所暗示的那樣)
...此外,這只會返回less
在搜索目錄時由 grep 匹配的文件(in ) )。
....並且我添加了-I
忽略二進位文件,它們可能會使less
交互變得混亂。如果您需要搜尋二進位檔案或 grep 可能「認為」是二進位的文件,請將其刪除。
在 grep 中使用「with-filename」標誌來顯示檔案。 (標誌是-H
)
我假設您正在梳理一個目錄及其中的每個文件。如果在目前目錄之外搜索,請使用 來*
防止「是目錄」錯誤而沒有結果。
grep -HI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
或者
grep --with-filename -I pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
或如果深入子目錄......
grep -rHI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')
我不喜歡輸入兩次模式,它需要改進
答案3
如果您想查看搜尋文字在文件中的位置,請使用 C 標誌。例如:
grep -C 5 'MySearchText' *
將顯示包含文字的行以及預期搜尋之前的五行和之後的五行。
答案4
為了補充其他答案:您可以在選項中添加“-n”以查看左側的行號:
grep -n -C 3 "something" filename
將顯示包含「something」的行,其中包含 3 行「Context」(即符合「something」的行前後各 3 行),並且顯示的每行都會在開頭附加其行號。