1. ホーム
  2. bash

[解決済み] Colorized grep -- マッチをハイライトしてファイル全体を表示する

2022-03-16 12:55:01

質問

私は grep 's --color=always フラグは非常に便利です。しかし、grepは(文脈行を要求しない限り)マッチした行だけを表示します。表示される各行がマッチしていることを考えると、ハイライトはそれほど多くの機能を追加するものではありません。

本当は cat をクリックすると、パターンマッチがハイライトされたファイル全体が表示されます。

マッチするかどうかに関係なく、読み込まれたすべての行を表示するように grep に指示する方法はありますか?ファイルのすべての行に対して grep を実行するスクリプトを書くことができるのは知っていますが、これが標準の grep .

解決方法は?

ここでは、その方法をご紹介します。

grep --color 'pattern\|$' file
grep --color -E 'pattern|$' file
egrep --color 'pattern|$' file

| 記号はOR演算子です。この記号をエスケープするには \ を付けるか、-Eを付けて検索テキストが正規表現として解釈されることをgrepに伝えるか、あるいは egrep コマンドの代わりに grep .

検索テキスト "pattern|$"は実はトリックで、以下のような行にマッチします。 pattern または末尾を持つ行。すべての行に終端があるので、すべての行にマッチしますが、行の終端は実際には何の文字でもないので、色はつきません。

また、色のついた部分をパイプに通すには、例えば、次のようにします。 less を指定します。 always パラメータを --color :

grep --color=always 'pattern\|$' file | less -r
grep --color=always -E 'pattern|$' file | less -r
egrep --color=always 'pattern|$' file | less -r