web-dev-qa-db-ja.com

色付けされたgrep - ハイライトされたマッチでファイル全体を見る

grep--color=alwaysフラグは非常に便利だと思います。ただし、grepは、一致する行のみを出力します(コンテキスト行を要求しない限り)。印刷する各行が一致していることを考えると、強調表示ではできる限り多くの機能が追加されるわけではありません。

私は本当にファイルをcatにして、パターンマッチがハイライトされているファイル全体を見たいです。

一致するかどうかにかかわらず、読み取られるすべての行を印刷するようにgrepに指示する方法はありますか。ファイルのすべての行でgrepを実行するスクリプトを書くことができることはわかっていますが、これが標準のgrepで可能かどうかに興味がありました。

457
zslayton

これを行うにはいくつかの方法があります。

grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file
728
Ryan Oberoi

これは同じことです。たぶん、あなたはとにかく使用量が少なくなるので、これを試してみてください。

less -p pattern file

パターンを強調表示し、ファイル内で最初に出現したパターンにジャンプします。

84

私はお勧めしたいのですが ああ - grep、プログラマのための強力な検索ツールよりはましだ

 $ ack --color --passthru --pager = "$ {PAGER:-less -R}"パターンファイル
 $ ack --color  - パススルーパターンファイル|少ない-R 
 $ export ACK_PAGER_COLOR = "$ {PAGER:-less -R}" 
 $ ack  - パススルーパターンファイル

デフォルトではディレクトリの再帰的検索が行われ(grep -rよりもはるかに賢く)、(POSIXish regex(3) ではなく)完全なPerl正規表現をサポートし、検索時のコンテキスト表示がはるかに良くなるので、私は気に入っています。多くのファイル.

46
ephemient

エイリアスを作成することもできます。この関数をあなたの.bashrc(またはosxでは.bash_profile)に追加してください。

function grepe {
    grep --color -E "$1|$" $2
}

これで、エイリアスを "ifconfig | grepe inet"または "grepe css index.html"のように使用できます。

(PS:現在のセッションでbashrcをリロードするためにsource ~/.bashrcを忘れないでください)

18
Fabien Sa

https://github.com/kepkin/dev-Shell-essentials から私のhighlightスクリプトを使用できます。

それぞれの一致を独自の色で強調表示できるため、grepよりも優れています

$ command_here | highlight green "input" | highlight red "output"

Screen shot from Github project

17
kepkin

coloutプログラムを使う: http://nojhan.github.io/colout/

テキストストリームにカラーハイライトを追加するように設計されています。正規表現と色( "red"など)を指定すると、一致が強調表示されたテキストストリームが再現されます。例えば:

# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile

複数の異なるハイライトを追加するために複数の呼び出しを連鎖することができます。

tail -f /var/log/nginx/access.log | \
    colout ' 5\d\d ' red | \
    colout ' 4\d\d ' yellow | \
    colout ' 3\d\d ' cyan | \
    colout ' 2\d\d ' green

あるいは、N個のグループを持つ正規表現(正規表現の括弧で囲まれた部分)を使用し、その後にN色のコンマ区切りリストを使用しても同じことができます。

vagrant status | \
    colout \
        '\''(^.+  running)|(^.+suspended)|(^.+not running)'\'' \
        green,yellow,red
12
user2683246

これを私の.bash_aliasesに追加しました:

highlight() {
  grep --color -E "$1|\$"
}
5
uronce

Grepの-zオプションもとても滑らかです!

cat file1 | grep -z "pattern"
2

ファイル全体を表示しながらパターンを強調表示するには、 h でこれを実行できます。

さらに、さまざまなパターンにさまざまな色を使用します。

cat FILE | h 'PAT1' 'PAT2' ...

読みやすくするために、hの出力をless -Rにパイプ処理することもできます。

各パターンに1色ずつgrepして使用するには、 cxpgrep が適しています。

2
treulz

もう一つの汚い方法:

grep -A80 -B80 --color FIND_THIS IN_FILE

私がやった

alias grepa='grep -A80 -B80 --color'

bashrcで。

1
fly_a320

わかりました、これは一方通行です、

wc -l filename

行数を表示します - NNと言って、あなたがすることができ

grep -C NN --color=always filename
1
nik

これはAwkのgsub関数を使って探しているテキストを適切なエスケープシーケンスに置き換えて明るい赤色で表示するシェルスクリプトです。

#! /bin/bash
awk -vstr=$1 'BEGIN{repltext=sprintf("%c[1;31;40m&%c[0m", 0x1B,0x1B);}{gsub(str,repltext); print}' $2

そのようにそれを使ってください:

$ ./cgrep pattern [file]

残念ながら、grepのすべての機能を持っているわけではありません。

詳しくは、Linux Journalの記事「 Colorが好きです 」を参照してください。

1
Wernsey

もう1つの答えは、n行のContextを含むgrepの-Cnスイッチです。 egrepパターンがあまりにも手間がかかるように見えるとき、または私がrcgをインストールしていないマシン上にいるときに、(少なくとも)screenfullのコンテキストを取得する手っ取り早い方法としてn = 99でこれを行うまたはccze。

私は最近cczeを発見しました。これはより強力なカラーライザーです。私の唯一の不満は、あなたが "raw ANSI"出力のために-Aスイッチを指定しない限り、それがスクリーン指向であるということです(私はその理由で決して使いませんlessのように)。

上記のrcgについて+1。それはエイリアスでカスタマイズするのがとても簡単であるのでそれはまだ私のお気に入りです。このようなものは通常私の〜/ .bashrcにあります:

alias tailc = 'tail -f/my/app/log/file | rcg "太い緑色"を送信 "CYAN"エラーを受信 "RED"

1
MarkHu

私は同様の目的のために次のコマンドを使用します。

grep -C 100 searchtext file

これはgrepが強調表示された検索テキストの前後に100 * 2行のコンテキストを印刷することを意味します。

0
Al Mamun

色の異なるいくつかのパターンをハイライトしたい場合は、 this bashスクリプトを参照してください。

基本的な使い方

echo warn error debug info 10 nil | colog

実行中にパターンや色を変更してからキーを入力することができます。

0
Edoot

あるいは、 The Silver Searcher を使用して実行することもできます。

ag <search> --passthrough
0
Andrew Magee