2016-07-27 49 views
1

當您使用grep兩次時,第一個高亮部分被刪除。據我所知,這有助於避免匹配格式化代碼。 (相比之下,只要匹配不重疊,「ack-grep」將突出顯示新匹配,同時保留舊匹配的格式,但它會高興地匹配使用的格式代碼。) 我正在尋找的行爲是模式匹配底層文本,就好像格式不存在一樣,但不會犧牲從原始文件中剝離格式以供將來顯示。這種行爲是否構建在某個地方?我用grep別名--color = always。你能保存grep中不匹配內容的格式嗎?

這可能是Preserve colouring after piping grep to grep的一個副本 - 但是我也在尋找爲什麼某些程序去掉格式化,以及它是否可以用來糾正意外轉義代碼匹配。 (如果這個問題已解決或無法解決,我會很高興地關閉它。)

回答

2

默認情況下,在.bashrc文件中,ls和grep被定義爲別名。別名有:

ls -> ls --color=auto 
grep -> grep --color=auto 

auto選項意味着如果stdout是在屏幕上,它會顯示顏色輸出,但如果輸出重定向到一個管道或文件,顏色格式化將被刪除。當你放上選項「--color = always」時,無論輸出重定向到什麼地方,這都會強制用顏色進行格式化。您也可以不使用任何顏色格式--color=never

您可以通過鍵入alias來檢查別名。您也可以執行簡單的lsgrep命令(即,別名給出的參數)在開始處附加反斜槓。

例如,ls命令:

\ls 

將顯示輸出到屏幕而不顏色。

+0

謝謝......我不確定如何獲得我想到的有關此信息的行爲,但它確實有幫助。如果你有一個通過管道連接到另一個grep的管道,只有最後一個grep會着色,因爲第一個管道在管道上被剝離/跳過。你認爲有一種方法可以區分彩色和純色版本,在普通版本上運行,並將三角洲(轉義碼)合併回來?我知道這比沒有更實際的用例更值得付出,但我覺得我錯過了一些重要的轉義代碼和流編輯。 (...) –

+0

有沒有更好的方式來模式匹配和/或替換「印刷」字符,同時忽略但保留「未印刷」字符? –