過去問ドリル

LinuCレベル1 GNUとUnixのコマンド 問29

GNUとUnixのコマンド/正規表現を使用したテキストファイルの検索

ファイル data.txt に対して grep -F 'a.b' data.txt を実行したときの動作として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル1の出題範囲「GNUとUnixのコマンド」に対応。実際の試験問題ではありません)

正解:D

解説

grep -F は、パターンを正規表現ではなく固定文字列として扱うオプションです。このため「.」もメタ文字ではなく普通の文字として扱われ、「a.b」という文字列そのものを含む行だけが表示されます。オプションを付けない grep 'a.b' では「.」が任意の1文字を表すため、「axb」や「a-b」なども一致します。かつて使われた fgrep は grep -F と同じ働きをしますが、GNU grepでは長く非推奨とされており(アップストリームの3.8以降は実行時に警告も出ます)、grep -F を使うのが推奨されています。同様に egrep も grep -E を使うのが推奨されています。

選択肢ごとの解説

  • A誤り。これはオプション無しの grep 'a.b' の動作です。-F を付けると「.」はメタ文字として扱われません。
  • B誤り。一致しない行を表示するのは -v オプションの働きで、-F の働きではありません。
  • C誤り。拡張正規表現として解釈するのは -E、一致部分だけを表示するのは -o の働きです。
  • D正しい。-F はパターンを固定文字列として扱うため、「a.b」という文字列そのものを含む行が表示されます。
LinuCレベル1の問題を演習モードで解く