LinuCレベル1 101試験の例題と解説

1.03.4正規表現を使用したテキストファイルの検索

今回は、LinuC 101試験の試験範囲から「1.03.4 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。
grep,egrep,fgrepの違いについて取り上げます。

Linucレベル1 101試験 出題範囲


例題

以下のテキストファイル sample.txt から ^apple という文字列を含む行だけを表示するためのコマンドを2つ選択してください。

[sample.txt]
apple:100
^apple:200
apple$:300

  1. grep '^apple' sample.txt
  2. fgrep '^apple' sample.txt
  3. egrep '^apple' sample.txt
  4. grep -F '^apple' sample.txt

※この例題は実際の試験問題とは異なります。


解答と解説

答えは「2. fgrep '^apple' sample.txt」と「4. grep -F '^apple' sample.txt」です。

grepはファイルから指定した検索パターンにマッチする行を表示するためのコマンドです。
検索するファイルを複数指定したり、標準入力から受け取ったデータから検索を行なうこともできます。

検索パターンは正規表現で指定することができます。
例えば、テキストファイル test.txt から、先頭が abc で始まる行を表示する場合は以下のように指定します。

grep '^abc' test.txt

検索パターンに使用する正規表現は、下記から選択することができます。

1) 拡張正規表現
-E, --extended-regexp オプションを指定すると、拡張正規表現での検索を行なうことができます。
egrepコマンドを使用することもできます。

2) 固定文字
-F, --fixed-strings オプションを指定すると、固定文字(正規表現を使わない)での検索を行なうことができます。
fgrepコマンドを使用することもできます。

3) 基本正規表現
-G, --basic-regexp オプションを指定すると、基本正規表現での検索を行なうことができます。
grepコマンドのデフォルトの動作です。

4) Perl正規表現
-P, --perl-regexpを指定しると、Perl形式の正規表現での検索を行なうことができます。

それぞれの選択肢について解説します。

1. grep '^apple' sample.txt
誤っています。
オプションを指定していないので、デフォルトの動作である基本正規表現での検索が行われます。
^ は表の先頭を指定する記号ですので、先頭が apple の行を検索しており、^apple という文字列を検索することはできません。

2. fgrep '^apple' sample.txt
正解です。
fgrepコマンドを使用していますので、固定文字での検索が行われます。
^apple という文字列を検索することができます。

3. egrep '^apple' sample.txt
誤っています。
egrepコマンドを使用していますので、拡張正規表現での検索が行われます。
^ は行の先頭を指定する記号ですので、先頭が apple の行を検索しており、^apple という文字列を検索することはできません。

4. grep -F '^apple' sample.txt
正解です。
-F オプションを指定していますので、固定文字での検索が行われます。
^apple という文字列を検索することができます。

grep,egrep,fgrepの違いや正規表現の指定方法を把握しておきましょう。


例題作成者

株式会社デージーネット OSS研究室 大野 公善

ページトップへ