テキスト内の正規表現を強調表示するコマンドですか?

テキスト内の正規表現を強調表示するコマンドですか?

テキスト内の特定の表現を強調表示するコマンドはありますか?

私は、ビューアではなく stdout に通常のテキスト出力を行う、less の「検索」機能のようなものを探していますless

例:

$ cat test.txt | highlight "an"

今後の見通しアフガニスタンからの秩序あるNATO撤退ですハミド・カルザイ大統領が民主党を率いたことで、2度の挫折を経験した。米軍の制限を撤廃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

今後の見通しアフガニスタンからの秩序あるNATO撤退ですハミド・カルザイ大統領が民主党を率いたことで、2度の挫折を経験した。米軍の制限を撤廃d タリブ和平交渉を中止した。

blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt

秩序ある見通しNATO撤退アフガニスタンハミド・カルザイ大統領が米軍の制限を要求し、タリバンが和平交渉を停止したことで、タリバンは2つの挫折を経験した。

答え4

$cat test.txt | grep --colour=auto -C 100000 an

「color」も機能します。 grep が常にオプションを使用するようにエイリアスを定義することもできます。

alias grep='grep --colour=auto -C 100000'

上記を /etc/profile.d/ のどこか、または .bashrc などに置いてください。

関連情報