コマンド出力全体を表示しながら、コンソール検索出力を強調表示します


19

たとえばcat file.txt | grep --color=tty "pattern"、使用すると、検索したパターンが強調表示されます。各ヒットのコンテキストをもっと知りたい場合、grepには-A-Bおよび-Cパラメーターがあります。

ただし、ファイル全体(またはコマンド出力)を表示し、特定のパターンを強調表示する必要があります。そのようなハイライトコマンドまたはツールは存在しますか?


今やりたいことは、すでにやっていることとどのように違いますか?
ベンジャミンバニエ

回答:


22

unix.stackexchange.comには、このきちんとしたトリックがある答えがありました。

grep -E --color 'pattern|$' file.txt

または

grep --color 'pattern\|$' file.txt

これは、パターンまたは各行の行末に一致します。パターンのみが強調表示されます。


+1シンプルで、zgrep、bzgrepなどに簡単に適応できます。
ステファンLasiewski

--colorを常に入力しないようにする方法はありますか?色オプションをgrepに埋め込むのはかなり基本的だと思いますが、毎回明示的に色を入力する理由がわかりません。grepdファイルにはgrep --color $ 1 $ 2というbashがあるというスクリプトを作成しようとしましたが、機能しません。ここで、任意の手掛かりは、このしてください修正する
SrujanクマールGulla

1
@lordlupine:に追加GREP_OPTIONS='--color'します~/.bashrc(または設定を変更してを含めます--color)。新しいターミナルを起動するか、現在のターミナルのコマンドラインでその割り当てを実行して、それを有効にする必要があります。
追って通知があるまで一時停止します。

9

私はackが好きです。

ack --passthru somepattern filename

これはgrepに似ていますが、優れています。デフォルトで強調表示され、--passthruオプションを使用すると、一致する行だけではなく、ファイル全体(または標準入力)が表示されます。


1
fromからackに出力をパイプしようとしtailている場合は、--filterオプションも使用する必要があります。例:tail -f myLogFile | ack --filter --passthru pattern
sparrowt

5

less(またはそのような)の使用もお勧めしますが、より教訓的な解決策を示したいと思います。この関数を定義したら:

関数highlight()
{
    sed "s / $ 1 /` tput smso`& `tput rmso` / g" "$ {2:-}"
}

次のように使用できます。

command | highlight pattern
highlight pattern file.txt

注:このバージョンでは大文字と小文字が区別され、式のigに追加するだけで変更されますsed


1
tput値をハードコーディングする代わりに呼び出します。この方法echo -eでは、他の効果をもたらす可能性のあるの使用も避けます。
イグナシオバスケス-アブラムス

あなたは絶対に正しいです、私は運なしでそれを検索しました。ありがとう。
サイラス

このバージョンでは、キャプチャする括弧を必要としないとのいずれかによって実行することができますprog | highlight "pattern"highlight "pattern" filehighlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
追って通知があるまで一時停止。

私のsedスキルは基本的に存在しません。パターンの大文字と小文字を区別するために、どのように変更する必要がありますか。とにかく、それをbash_functions includeに追加します。どうもありがとうございました。
DerMike

@DerMike:大文字と小文字が区別されるようになりました。
cYrus

3

パッシング-Cgrep十分に高い値では、これを行います。


前回試してみたときに、何か他のものを手に入れたと断言できました。(それぞれのコンテキストは '-----'セパレーターで区切ります。)あなたが私に言ったので、それはうまく動きます:-)ありがとう。
DerMike

十分なコンテキストがない場合、各一致を分離します。
イグナシオバスケス-エイブラムス

3

less パターンを強調しているので、

less -p 'mypattern' file.txt

または

ridiculously | long | pipe | less

次にless /でハイライトされるパターンを検索します。

サイドノート:

たとえば、
エイリアスalias grep="grep --color=tty"を設定し、そのように使用するなど、コマンドを改善できます。

grep 'mypattern' file.txt;

1
GREP_OPTIONSの使用は控え、代わりにエイリアスを使用してください。参照:bugs.launchpad.net/ubuntu/+bug/67141
lesmana

プリムノンノーチェ。削除されました。
カジュアルコーダー

GREP_OPTIONSは多くの形式grep(zgrep、bzgrep、bzfgrepなど)で使用されます。したがって、すべての形式のgrepが一貫して動作するようにするには、grepの各形式にエイリアスを設定する必要があります。上記の@Casualの新しい答えbzgrep pattern /var/log/messages.?.gzは、のようなものでは役に立ちません。これは、色の強調表示が非常に役立つ例です。
ステファンLasiewski

1

まさにその目的を果たす素晴らしいsupercatツールがあります。コンソール出力を色付けし、入力から「強調表示された」htmlを生成できます。


有難うございます。ただし、現時点では機能していないようです。
DerMike

1
/etc/supercatカラーリングルールを設定する構成ファイル(Ubuntuの場合)を見てください。これらは基本的に(いくつかの追加ルールを含む)カラー/正規表現のペアです。manページも短くてすてきです。
イヴァンタラソフ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.