
是否有一個命令可以突出顯示文本中的某個表達式?
我正在 less 中尋找類似“搜尋”功能的東西,但在標準輸出上而不是查看器上使用普通文字輸出less
。
例子:
$ cat test.txt | highlight "an"
前景一個北約有序撤出阿富汗一個是一個哈米德·卡爾扎伊總統上台後遭遇兩次挫折一個對美國軍隊的限制一個d 塔利班一個停止了和平談判。
它可以使用顏色或任何其他方式來突出顯示指定的正規表示式。
答案1
不確定這是由於某個功能還是只是一些隱藏的副作用,但這在 GNU grep
2.11 中有效:
grep --color 'an\|' test.txt
答案2
確認有一個--passthru
選項可以做到這一點:
ack --passthru an test.txt
some_command | ack --passthru an -
答案3
你可以試試我的這個腳本。它可以讓您指定一個文件或採用標準輸入。您可以為要反白的文字定義 Python 正規表示式。突出顯示的文字預設為霓虹綠(嘿,我使用黑色背景!)但是您可以更改ANSI 顏色代碼。
#!/usr/bin/env python
import sys
import re
def highlight_text(text,pat):
def replacement_funk(matchobj): return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
return re.sub(pat,replacement_funk,text)
if __name__ == '__main__':
if len(sys.argv) == 2:
input = sys.stdin
pat = sys.argv[1]
elif len(sys.argv) == 3:
input = open(sys.argv[2])
pat = sys.argv[1]
else:
sys.stderr.write("colorme pattern [inputfile]")
text = input.read()
print highlight_text(text,pat)
這是一個例子。
blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an
前景一個北約有序撤出阿富汗一個是一個哈米德·卡爾扎伊總統任內遭遇兩次挫折一個對美國軍隊的限制一個d 塔利班一個停止了和平談判。
blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt
有序推進的前景北約退出阿富汗由於總統哈米德·卡爾扎伊要求限制美國軍隊以及塔利班停止和談,塔利班遭受了兩次挫折。
答案4
$cat test.txt | grep --colour=auto -C 100000 an
「顏色」也有效。您也可以定義別名以使 grep 始終使用該選項:
alias grep='grep --colour=auto -C 100000'
將以上內容放在 /etc/profile.d/ 某處或您的 .bashrc 或其他位置。