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


14

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

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

例:

$ cat test.txt | highlight "an"

見通しAfghから秩序NATOの撤退は、ISTは、カルザイ大統領のように苦しんで2つの挫折は、DEM 、米国軍のDED制限タリブをd 和平交渉を停止します。

色またはその他の手段を使用して、指定された正規表現を強調表示できます。



@Gilles、多少ですが、その質問にはもっと複雑な要件がありました。
cjm

回答:


17

これが機能によるものなのか、何らかの隠れた副作用によるものなのかはわかりませんが、これはGNU grep2.11で機能します:

grep --color 'an\|' test.txt

10
あなたがやっているようですgrep 'an' OR ''''成功した入力内のすべての場所で何にもマッチしません。an何も強調表示できないため、のみが強調表示されます。:
ミケル

純粋な天才。それは私にとってはうまくいきませんでしたが、grep --color -e 'an' -e ' '(スペースに合わせると、色付けできず、うまくいきました)。にパイピングするよりもはるかに優れていますがsed -e ''/an/s//$(printf "\033[33;1m&\033[0m")/''、多分後者の方がパフォーマンスが高いでしょう。別の検索語の「an」を変更します。;)
sjas

うわー!これを使用してbashrc、すべてのエイリアスを一覧表示するために使用したコマンドを変更しました。現在、すべてのエイリアスが赤で強調表示されています。素晴らしい!alias aliases="clear;cat ~/.bashrc|grep --color \"alias\""
ナビゲーション

9

ackに--passthruこれを行うオプションがあります:

ack --passthru an test.txt
some_command | ack --passthru an -

2
(+1)btw:Ubuntuリポジトリでは、パッケージ(および実行可能ファイル)が呼び出されack-grepます...(名前ackは漢字コードコンバーターに適用されます)
-Peter.O

2

私のこのスクリプトを試すことができます。ファイルを指定するか、標準入力を使用します。ハイライトするテキストの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

見通しAfghから秩序NATOの撤退AN ISTは、カルザイ大統領のように苦しんで2つの挫折は、DEM 、米国軍のDED制限タリブをd 和平交渉を停止します。

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

アフガニスタンからのNATOの秩序ある撤退の見通しは、ハミド・カルザイ大統領が米国軍隊に対する制限を要求し、タリバンが和平会談を中止したため、2つの後退に苦しんだ。


stackexchangeの太字マークアップはファンキーなように見えます。そのため、出力に余分な星が付いています。私を殴る。
fthinker

<b>単語の一部を太字にする必要がある場合に使用します。
cjm

0

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

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

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

上記を/etc/profile.d/のどこか、または.bashrcなどに置きます。


1
一致する行のみが印刷されます。フランクは、一致するものだけを強調表示して、テキスト全体を望んでいます。
-cjm

上記に-Cを追加しました-動作しますが、少し面倒です!
-gerdesj

3
動作しますが、grepというエイリアスを作成しないでください。-C 1000000あなたは再びgrepすることはできません。ただ、やるalias highlight='grep --colour=auto -C 1000000'. The cat in the first example is also not necessary: のgrep --colour = -C 100000 file`オート。
マッテオ

大きなファイルでどれだけのメモリが消費されるのだろうか。(grepコンテキスト行のコレクションをどのように処理するかを検討したことはありません。)
cjm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.