grep
100%

テキスト操作 · レッスン 16

grep

固定文字列または正規表現で行を選択し、grep の結果を解釈する方法を学びます。

grep コマンドは、パターンに一致する入力行を選びます。指定ファイルまたは stdin を検索し、一致行の周辺を表示し、選択行を数え、終了ステータスで一致の有無を伝えられます。

ファイル内の行を照合する

パターンの後に 1 つ以上の入力ファイルを渡します。

$ grep 'fox' sample.txt

GNU grep は標準でパターンを基本正規表現として解釈し、選択した各行を表示します。空白やシェルのメタ文字が先に解釈されないよう、パターンを引用します。

正規表現ではなく固定文字列として扱うには -F を使います。

$ grep -F 'price: $5.00' products.txt

正規表現として解釈せず、products.txt から文字列 price: $5.00 を検索するコマンドはどれですか?

パターン構文を選ぶ

GNU grep でよく使う 3 つのモードは次のとおりです。

  • 標準:基本正規表現。
  • -E|+? などをバックスラッシュなしで使う拡張正規表現。
  • -F:正規表現演算子を使わない固定文字列。

^$ は行頭と行末に一致します。テキスト一覧から文字どおりの接尾辞 .txt で終わるファイル名を照合するには次を使います。

$ grep -E '\.txt$' filenames.txt

バックスラッシュはドットを文字どおりにし、正規表現でエスケープされていない . は任意の 1 文字に一致します。

文字どおりの接尾辞 .txt で終わる行に一致する拡張正規表現はどれですか?

パターンを安全に渡す

-e PATTERN はパターンを明示的に渡します。引用符だけではオプション解析を止められないため、パターンが - で始まる場合に特に便利です。

$ grep -e '-v' settings.conf

-e は繰り返して、いずれかのパターンに一致する行を選べます。-f patterns.txt はファイルから 1 行 1 パターンで読みます。

-v をオプションとして解釈させず、settings.conf からパターン -v を検索するコマンドはどれですか?

選択結果の出力を制御する

  • -i:大文字小文字の違いを無視する。
  • -n:選択行に行番号を付ける。
  • -v:一致しない行を選ぶ。
  • -c:入力ファイルごとの選択行数を表示する。
  • -o:完全な選択行ではなく、空でない一致部分だけを表示する。

大文字小文字を無視して fox を含む行を数える例です。

$ grep -ic 'fox' sample.txt

-c は一致の総出現数ではなく選択された行を数えます。fox fox を含む 1 行も件数は 1 です。GNU grep で重ならない一致の出現数が必要なら、grep -o PATTERN | wc -l というパイプラインも使えます。

data.txterror error を含む行が 1 行、一致しない行が 2 行あります。grep -c 'error' data.txt は何を報告しますか?

stdin の絞り込みとディレクトリ検索

入力ファイルがなければ grep は stdin を読み、パイプラインで自然に使えます。

$ env | grep '^USER='

ディレクトリ以下の読み取り可能なファイルを再帰検索するには -r を使います。

$ grep -r 'listen_port' config/

権限エラーなどの診断は stderr へ送られ、照合入力にはなりません。すぐに権限を昇格するのではなく、検索範囲を絞り、権限を理解してください。

generate-report | grep 'failed'grep は何を検索しますか?

終了ステータスを解釈する

通常の検索で GNU grep は、少なくとも 1 行を選ぶと 0、1 行も選ばなければ 1、エラーなら 2 を返します。これによりスクリプトは「一致なし」を読み取れないファイルや不正なパターンと区別できます。

-q は通常の出力を抑制し、一致を見つけると停止するため条件判定に便利です。表示が空だからといって成否を決めないでください。-q、リダイレクト、一致なし、エラーはいずれも stdout がほぼ空になり得ますが、ステータスは異なります。

固定文字列と正規表現の検索を練習するには、次のラボを試してください。

  1. Linux で grep を使ってテキストを検索する - 基本検索、行番号、アンカー、基本・拡張正規表現を練習します。
  2. Linux grep コマンド:パターン検索 - grep と正規表現でテキスト内のパターンを検索します。
  3. 干し草の中の針 - grep でパターン検索、件数集計、一意値の抽出、複数条件の組み合わせを行います。

レッスン完了

grep を完了しました

行指向テキストを検索し、一致とエラーを区別できるようになりました。

  • 基本、拡張、固定文字列の照合を選ぶ。

  • パターンを引用し、先頭がハイフンなら -e を使う。

  • 選択行数と出現数を混同せずに数える。

  • stdin を絞り込むか、対象を絞ったディレクトリを再帰検索する。

  • 一致、一致なし、エラーの終了ステータスを解釈する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
テキスト操作 に戻る