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

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

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

私はlessの「検索」機能のようなものを探していますが、ビューアの代わりにstdoutでプレーンテキスト出力を使用しますless

例:

$ cat test.txt | highlight "an"

展望一つNATO、アフガニスタンから秩序に撤退一つはい一つハミド・カルザイ大統領は執権後に二度のイライラを受けた。一つ米軍の制限一つd タリバン一つ平和会談は中止されました。

指定された正規表現を強調表示するには、色やその他の方法を使用できます。

答え1

これが機能によるのか隠れた副作用のためかはわかりませんが、grepGNU 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

展望一つNATO、アフガニスタンから秩序に撤退一つはい一つハミド・カルザイ大統領は執権後に二度のイライラを受けた。一つ米軍の制限一つ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または他の場所に置きます。

関連情報