grep
の--color=always
フラグは非常に便利だと思います。ただし、grepは、一致する行のみを出力します(コンテキスト行を要求しない限り)。印刷する各行が一致していることを考えると、強調表示ではできる限り多くの機能が追加されるわけではありません。
私は本当にファイルをcat
にして、パターンマッチがハイライトされているファイル全体を見たいです。
一致するかどうかにかかわらず、読み取られるすべての行を印刷するようにgrepに指示する方法はありますか。ファイルのすべての行でgrepを実行するスクリプトを書くことができることはわかっていますが、これが標準のgrep
で可能かどうかに興味がありました。
これを行うにはいくつかの方法があります。
grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file
これは同じことです。たぶん、あなたはとにかく使用量が少なくなるので、これを試してみてください。
less -p pattern file
パターンを強調表示し、ファイル内で最初に出現したパターンにジャンプします。
私はお勧めしたいのですが ああ - 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正規表現をサポートし、検索時のコンテキスト表示がはるかに良くなるので、私は気に入っています。多くのファイル.
エイリアスを作成することもできます。この関数をあなたの.bashrc(またはosxでは.bash_profile)に追加してください。
function grepe {
grep --color -E "$1|$" $2
}
これで、エイリアスを "ifconfig | grepe inet
"または "grepe css index.html
"のように使用できます。
(PS:現在のセッションでbashrcをリロードするためにsource ~/.bashrc
を忘れないでください)
https://github.com/kepkin/dev-Shell-essentials から私のhighlight
スクリプトを使用できます。
それぞれの一致を独自の色で強調表示できるため、grep
よりも優れています。
$ command_here | highlight green "input" | highlight red "output"
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
これを私の.bash_aliasesに追加しました:
highlight() {
grep --color -E "$1|\$"
}
Grepの-z
オプションもとても滑らかです!
cat file1 | grep -z "pattern"
もう一つの汚い方法:
grep -A80 -B80 --color FIND_THIS IN_FILE
私がやった
alias grepa='grep -A80 -B80 --color'
bashrcで。
わかりました、これは一方通行です、
wc -l filename
行数を表示します - NNと言って、あなたがすることができ
grep -C NN --color=always filename
これは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つの答えは、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"
私は同様の目的のために次のコマンドを使用します。
grep -C 100 searchtext file
これはgrepが強調表示された検索テキストの前後に100 * 2行のコンテキストを印刷することを意味します。
色の異なるいくつかのパターンをハイライトしたい場合は、 this bashスクリプトを参照してください。
基本的な使い方
echo warn error debug info 10 nil | colog
実行中にパターンや色を変更してからキーを入力することができます。
あるいは、 The Silver Searcher を使用して実行することもできます。
ag <search> --passthrough