如何在文件中搜尋單字,同時顯示整個文件以及找到的單字?

如何在文件中搜尋單字,同時顯示整個文件以及找到的單字?

我使用的是 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

因此,文件會彈出較少,所需的術語將突出顯示,您可以使用nshift+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 行),並且顯示的每行都會在開頭附加其行號。

相關內容