grepコマンドに関する最初の記事では、このツールを使用して単語のみを検索する方法、2つの単語を検索する方法、一致する単語を含む行をカウントする方法など、ツールが提供する多くの機能について説明しました。これらとは別に、このツールは、より理解しやすく便利な機能をいくつか提供します。この記事では、それらのいくつかについて説明します。
このチュートリアルで言及されているすべての例は、Ubuntu14.04LTSでテストされていることに注意してください。また、このチュートリアルのgrep関連のすべての例では、次のファイル(test_file1.txt)を使用します。
Grepで大文字と小文字を区別しない検索
デフォルトでは、grepは大文字と小文字を区別します。つまり、たとえば、「ABC」と「abc」を別々に扱います。ただし、大文字と小文字を区別せずに検索する場合は、 -iを使用できます。 コマンドラインオプション。
grep -i [string-to-be-searched] [filename]
例:
grep -i "linux" test_file1.txt
注 :パターン(たとえば、上記の例では「linux」)だけでなく、grepのmanページには、-iオプションを使用すると、入力ファイルの大文字と小文字の区別も無視されるようになると記載されています。抜粋は次のとおりです:
-i, --ignore-case
Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)
ただし、入力ファイルに関連する動作を最後に再現することはできませんでした。
Grepで一致する文字列を含む行を含む特定の一致しない行を表示する
このツールを使用すると、一致した文字列を含む行の後、前、または周囲に指定された数の行を表示することもできます。
-Aを使用する 一致した行の後に「N」行を出力するコマンドラインオプション。
$ grep -A N [string-to-be-searched] [filename]
例:
$ grep -A 2 "linux" test_file1.txt
上記のコマンドの出力は次のとおりです
同様に、-Bコマンドラインオプションを使用して、一致した行の前に行を表示します。
$ grep -B N [string-to-be-searched] [filename]
例:
$ grep -B 2 "linux" test_file1.txt
出力は次のとおりです:
最後に、一致した行の周囲に行を印刷するには、-Cコマンドラインオプションを使用します。
$ grep -C N [string-to-be-searched] [filename]
例:
$ grep -C 2 "linux" test_file1.txt
キャプチャされた出力は次のとおりです。
Grepで一致した文字列のみを印刷します
また、(デフォルトで表示される完全な行ではなく)標準出力に一致した文字列のみを印刷することもできます。この機能には、-oコマンドラインオプションを使用してアクセスできます。
$ grep -o [string-to-be-searched] [filename]
たとえば、ファイル内の文字列「linux」を検索する必要がある場合(ただし、完全な行は印刷しないでください)、次のコマンドを使用します。
$ grep -o "linux" [file-name]
*や。*などのワイルドカード文字を使用して、複数の文字列をgrepすることもできます。たとえば、「how」で始まり「linux」で終わる単語のグループをgrepする場合は、次のコマンドを使用できます。
$ grep -o “how.*linux” [file-name]
Grepでの位置の表示
grepコマンドを使用すると、一致した文字列が出現する行のバイトオフセットを表示することもできます。この機能には、-bコマンドラインオプションを使用してアクセスできます。ただし、このオプションをより適切に使用するために、-oコマンドラインオプションを使用すると、一致した文字列の正確な位置が表示されます。
$ grep -o -b [string-to-be-searched] [filename]
例:
$ grep -o -b "for" test_file1.txt
出力は次のとおりです:
これらすべてのオプションを毎日必要とするわけではありませんが、いつ便利になるかわからないため、少なくともそれらについて知っておく必要があります。 Grepは正規表現で使用するとさらに強力になりますが、そのトピックは別の日に残しておきます。