GNU/Linux >> Linux の 問題 >  >> Linux

grep と同様にテキストを強調表示しますが、テキストを除外しません

アックを使用します。その --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 通常、ほとんどのディストリビューションでデフォルトです
  • grep の一部のバリアントは空の一致を「最適化」するため、代わりに「apple|$」を使用することをお勧めします (https://stackoverflow.com/a/13979036/939457 を参照)

編集:

これは、OS X Mountain Lion の grep で動作します:

grep --color -E 'pattern1|pattern2|$'

これは '^|pattern1|pattern2' よりも優れています なぜなら ^ $ が 行末に一致します。一部の正規表現エンジンは pattern1 を強調表示しません または pattern2 なぜなら ^ すでに一致しており、エンジンは熱心です .

'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 不要な -- を削除するだけです BSD スタイルの grep によって挿入された行 Mac OS X Mountain Lion では、連続した一致のコンテキストが重なっている場合でも。

GNU grep が -- を省略したと思った 文脈が重なったときの行ですが、かなり前なので記憶違いかもしれません.


Linux
  1. 「猫」の出力で単語を強調表示する方法は??

  2. .gzファイルを解凍してテキストファイルを取得しますが、バイナリファイルを取得しますか?

  3. VPSとVPN–名前は似ていますが、機能が完全に異なります

  1. Grepコマンドを使用してファイル内のテキストを検索する方法

  2. CentOS/RHEL の vim と同様に、vi でテキストの色を有効にする方法

  3. grep でテキスト ファイルの空行を削除する

  1. テキスト操作のための3つの必知のLinuxコマンド

  2. 着信メールをText/plainからText/htmlに変更しますか?

  3. Linux で GREP を使用して特定のテキストを検索する方法