Bash:テキストファイルの内容を表示し、各単語の発生を強調表示します。

Bash:テキストファイルの内容を表示し、各単語の発生を強調表示します。

テキストファイルの内容を表示して各単語を強調表示するにはどうすればよいですか?

答え1

grep -C $(wc -l foo.txt | cut -d" " -f 1) --color word foo.txt

foo.txtはファイルパス、はクエリwordです。慣れていない場合、grepクエリは実際に正規表現。純粋に英数字であれば関係ありませんが、word一部の文字(例えば、[および)は]正規表現で特別な意味を持ちます。文字通り使用するには、prefixを使用してください\。さらに、これはシェルを通過するため、$エスケープで機能しない場合は興味深い作業を行います\

word引用符で囲むと、スペースを含めることができます。

ここで使用されている他のコマンドは、POSIXシステム(GNU / Linuxなど)にほぼ常に存在するものwcです。使い方を説明するページがcutあります。man

答え2

を使用すると、簡単にこれを行うことができますgrepfile.txtあなたのファイルはどこにありますか?word強調表示したいテキストです。以下を使用できます。

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

これは一致してハイライトです。word。また、各行の末尾の空の|文字列()を一致させて強調表示することもできます。$ただし、文字列が空であるため、追加のテキストは実際には強調表示されません。

$除いて一致word目的は、すべての行に一致が含まれるようにすることです。その後、オプションがない場合、または他のユーティリティへの呼び出しがない場合でも、すべてのgrep行を印刷します。-A-B-C

この-Eフラグはgrepモード引数を次のように解釈します。POSIX拡張正規表現(むしろ)。中のキャラクターによって異なるword、デフォルトの正規表現(BRE)を使用することができます。交互にすることは|正式にPOSIX基本正規表現の一部ではありませんが、実装では以下grepを使用して拡張としてサポートすることがよくあります\|

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

特に、GNU / LinuxシステムにはそれをサポートするGNU Grepがあります。を使用している場合は、--colorこの動作を使用することもできます。

このコマンドは、次のコマンドより簡単です。ゴールディラックスの答え。しかし、この回答のスキルにはいくつかの状況で明らかな利点があります。ここでメソッドはとを|使用するため、$実際には固定文字列ではなく正規表現でなければなりません。しかしゴールディラックスアプローチ-F、フラグを追加できます。引用する限り、必要なwordテキストを含めることができます。\wordシェルがgrep変更されずに渡されることを正しく保証します。

たとえば、次のように使用できます。

grep --color -FC "$(wc -l < file.txt)" 'word' file.txt

詳細については、次を参照してください。一致するラインだけでなく、すべてのラインを出力するようにgrepを説得します。(ようにスチールドライバー 提案)。


1 ~標準(IEEE Std 1003.1-2008)シフトが ERE ( 経由) の関数であることを指定します|が、いいえBREの特徴。しかし、実装が許可されています\|必要に応じて解釈してください。多くの人がこれを交互に解釈します。

一部の実装では、BRE構文を拡張して代替エントリを追加します。たとえば、サブ式 ""は文字列の末尾の ""または任意の位置にある ""\(foo$\|bar\)と一致します。拡張は未定義のシーケンスを使用してトリガーされます。foobar\|

関連情報