ファイル内の単語を検索し、見つかった単語とともにファイル全体を表示するにはどうすればよいでしょうか?

ファイル内の単語を検索し、見つかった単語とともにファイル全体を表示するにはどうすればよいでしょうか?

Ubuntu 16.04を使用しています。

特定の単語を検索したいのですが、その単語を含むファイル全体を端末に出力して、ファイル内の単語の位置を確認できるようにしたいです。しかし、 を使用するとgrep、ファイル全体ではなく、単語を含む特定の文のみが表示されます。

単語を検索し、その単語が配置されている場所とともにファイル全体を表示するには、どのコマンドを使用すればよいですか?

答え1

以下をgrep使用することができます:

$ grep -E -e 'pattern' -e '$' file

または簡略化した形式では:

$ grep -E 'pattern|$' file

技術的にはこれも機能します:

$ grep -E 'pattern|^' file

または : 。パターンのある行またはパターンのないgrep -E 'pattern|' file行を示します。したがって、すべてが一致します。pattern

grepにエイリアスを設定しているgrep --color=alwaysので、エイリアスを設定しない場合は、自分でカラー オプションを渡す必要があります。


less

$ less -p 'pattern' file

すると、ファイルが less でポップアップ表示され、目的の用語が強調表示され、nshift+ を使用しnて一致間を移動できるようになります。

答え2

編集: 元の回答では質問を誤解していました... 希望する結果を得るために編集しました... 出力にはファイル名のみを表示していました。この回答を編集し、その出力を使用して less を使用してファイル全体を表示するようにしました (Ravexina の回答が示唆しているように) ...さらに、これはディレクトリを検索する際に grep によって一致した
ファイル ( 内) のみを返します。 ....バイナリ ファイルを無視するように追加しました。バイナリ ファイルがあると、やりとりが面倒になる場合があります。バイナリ ファイルまたは grep がバイナリであると「判断する」可能性のあるファイルを検索する必要がある場合は、これを削除してください。less
-Iless

ファイルを表示するには、grep で "with-filename" フラグを使用します。(フラグは-H)

ディレクトリとその中の各ファイルを検索していると想定しています。現在のディレクトリの外部を検索する場合は、*結果が表示されず「ディレクトリです」というエラーが発生しないように、 を使用します。

grep -HI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

または

grep --with-filename -I pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

またはサブディレクトリにドリルダウンする場合...

grep -rHI pattern /directory/* | less -p pattern $(awk -F ":" '{print $1}')

パターンを2回入力するのは好きではないので、改善の余地がある

答え3

検索したテキストがファイル内のどこにあるかを確認したい場合は、C フラグを使用します。例:

grep -C 5 'MySearchText' *

テキストを含む行と、検索対象の 5 行前と 5 行後が表示されます。

答え4

他の回答を補足すると、オプションに「-n」を追加すると、左側に行番号が表示されます。

grep -n -C 3  "something"  filename

「something」を含む行と、「Context」の 3 行 (つまり、「something」に一致する行の前後の 3 行) が表示され、表示される各行の先頭に行番号が追加されます。

関連情報