一致するラインだけでなく、すべてのラインを出力するようにgrepを説得します。

一致するラインだけでなく、すべてのラインを出力するようにgrepを説得します。

次のようなファイルがあるとしましょう。

$ cat test

test line 1
test line 2
line without the search word
another line without it
test line 3 with two test words
test line 4

デフォルトでは、grepクエリを含むすべての行が返されます。

$ grep test test

test line 1
test line 2
test line 3 with two test words
test line 4

--color引数を渡すと、grep検索式と一致する行部分が強調表示されますが、その式を含む行のみが返されます。grepソースファイルのすべての行を出力しますが、強調表示が一致する方法はありますか?

これを達成するための私の現在のひどいハッキングは、(少なくとも一致するものがない10000を超える連続行がないファイルについて)次のようになります。

$ grep -B 9999 -A 9999 test test

両方のコマンドのスクリーンショット

これが不可能な場合は、grep同じ機能を提供する他のコマンドラインツールはありますか?私はそれに触れました。ackが、選択の余地がないようです。

ベストアンサー1

grep --color -E "test|$" yourfile

ここで私たちがすることは、$パターンとテストパターンを一致させることです。当然、$色を指定することはないので、テストパターンだけが色を取得します。-E拡張正規表現一致を有効にするだけです。

次の関数を簡単に作成できます。

highlight () { grep --color -E "$1|$" "${@:1}" ; }

おすすめ記事