質問: 一致するものだけでなく、すべての行を出力するように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 をいじってみましたが、それにオプションがないようです。
回答: ripgrep ripgrepとその--passthruパラメータを使用します。rg --passthru pattern file.txt rust's regex engine の上に構築されているため、これは 最速のgreppingツール の1つです。 --passthru-一致する行と一致しない行の両方を出力します。 同様の効果を達成する別の方法は、空の文字列に一致するようにパターンを変更することです。たとえば、rg fooを使用して検索している場合、代わりにrg "^|foo"を使用すると、検索されたすべてのファイルのすべての行が出力されますが、fooの出現のみが強調表示されます。このフラグは、パターンを変更することなく同じ動作を可能にします。