Grepを使用すると、正規表現に一致する行のテキストが強調表示されます。
この動作が必要なのに、grepですべての行を出力した場合はどうなりますか? grepのmanページをざっと見てから、空っぽになりました。
Ackを使用します。ここで--passthru
オプションを確認してください: ack 。完全なPerl正規表現を許可するという追加の利点があります。
$ ack --passthru 'pattern1' file_name
$ command_here | ack --passthru 'pattern1'
次のようにgrepを使用して実行することもできます。
$ grep --color -E '^|pattern1|pattern2' file_name
$ command_here | grep --color -E '^|pattern1|pattern2'
これにより、すべての行が一致し、パターンが強調表示されます。 ^
はすべての行頭と一致しますが、文字ではないため、印刷/強調表示されません。
(ほとんどのセットアップでは、デフォルトで--colorが使用されることに注意してください。このフラグは必要ない場合があります)。
すべての行が一致することを確認できますが、無関係な一致を強調表示するものはありません
egrep --color 'Apple|' test.txt
注:
egrep
のスペルもgrep -E
です--color
は通常、ほとんどのディストリビューションでデフォルトです編集:
これはOS X Mountain Lionのgrepで動作します:
grep --color -E 'pattern1|pattern2|$'
代替の'^|pattern1|pattern2'
部分は行の先頭で一致するのに対し、^
は行の末尾で一致するため、これは$
よりも優れています。いくつかの 正規表現エンジン はpattern1
またはpattern2
を強調表示しません。これは^
がすでに一致しており、エンジンがeagerであるためです。
'pattern1|pattern2|'
についても同様のことが起こります。これは、正規表現エンジンが、パターン文字列の末尾の空の代替がサブジェクト文字列の先頭と一致することに気付くためです。
[1]: http://www.regular-expressions.info/engine.html
最初の編集:
私はPerlを使用することになりました:
Perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'
これは、ANSI互換端末があることを前提としています。
元の回答:
奇妙なgrep
で立ち往生している場合、これはうまくいくかもしれません:
grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'
番号を調整して、必要なすべての行を取得します。
2番目のgrep
は、Mac OS X Mountain LionでBSDスタイルのgrep
によって挿入された余分な--
行を、連続した一致のコンテキストが重複する場合でも削除します。
コンテキストが重複する場合、GNU grepが--
行を省略したと思っていましたが、しばらくしていたので、間違っていることを覚えているかもしれません。
https://github.com/kepkin/dev-Shell-essentials のmyhighlightスクリプトを使用できます
Grepよりもbetterであるため、各一致を強調表示できるown color 。
$ command_here | highlight green "input" | highlight red "output"
マッチを強調表示したいので、これはおそらく(たとえば、別のプログラムへのパイピングとは対照的に)人間が消費するためのものなので、ニースの解決策は以下を使用することです。
less -p <your-pattern> <your-file>
また、大文字と小文字の区別を気にしない場合:
less -i -p <your-pattern> <your-file>
これには、ページがあるという利点もあります。これは、長い出力を処理する必要がある場合に便利です。
次の方法でgrepのみを使用して実行できます。
次のことができます。
while read line ; do (echo $line | grep PATTERN) || echo $line ; done < inputfile
「すべての」行を印刷したい場合、簡単な解決策があります。
grep "test" -A 9999999 -B 9999999
検索でより多くのコンテキストが必要なためにこれを行っている場合、これを行うことができます:
cat BIG_FILE.txt | less
less
で検索を行うと、検索語が強調表示されます。
または、お気に入りのエディターに出力をパイプします。 1つの例 :
cat BIG_FILE.txt | vim -
次に、検索/ハイライト/置換。