Grep

說服 grep 輸出所有行,而不僅僅是匹配的行

  • November 11, 2021

假設我有以下文件:

$ cat test

test line 1
test line 2
line without the search word
another line without it
test line 3 with two test words
test line 4

預設情況下,grep返回包含搜尋詞的每一行:

$ grep test test

test line 1
test line 2
test line 3 with two test words
test line 4

--color將參數傳遞給grep將使其突出顯示與搜尋表達式匹配的行部分,但它仍然只返回包含表達式的行。有沒有辦法grep輸出源文件中的每一行,但突出顯示匹配項?

我目前實現這一點的可怕技巧(至少在沒有 10000+ 連續行且沒有匹配的文件上)是:

$ grep -B 9999 -A 9999 test test

兩條命令的截圖

如果grep不能做到這一點,是否有另一個提供相同功能的命令行工具?我已經擺弄了ack,但它似乎也沒有選擇。

grep --color -E "test|$" yourfile

我們在這裡所做的是匹配$模式和測試模式,顯然$沒有任何要著色的東西,所以只有測試模式有顏色。-E只是打開擴展的正則表達式匹配。

您可以像這樣輕鬆地從中創建一個函式:

highlight () { grep --color -E "$1|$" "${@:1}" ; }
ack --passthru --color string file

對於 Ubuntu 和 Debian,使用 ack-grep 而不是 ack

ack-grep --passthru --color string file

引用自:https://unix.stackexchange.com/questions/366