在文字中突出顯示正規表示式的命令?

在文字中突出顯示正規表示式的命令?

是否有一個命令可以突出顯示文本中的某個表達式?

我正在 less 中尋找類似“搜尋”功能的東西,但在標準輸出上而不是查看器上使用普通文字輸出less

例子:

$ cat test.txt | highlight "an"

前景一個北約有序撤出阿富汗一個一個哈米德·卡爾扎伊總統上台後遭遇兩次挫折一個對美國軍隊的限制一個d 塔利班一個停止了和平談判。

它可以使用顏色或任何其他方式來突出顯示指定的正規表示式。

答案1

不確定這是由於某個功能還是只是一些隱藏的副作用,但這在 GNU grep2.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 或其他位置。

相關內容