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

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

今回は、LinuC 101試験の試験範囲から「103.7 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。
grep,egrep,fgrepの違いについて取り上げます。
grep,egrep,fgrepコマンドを正しく使えるか確認しておきましょう。

■トピックの概要
このトピックの内容は以下の通りです。

<103.7 正規表現を使用したテキストファイルの検索>
重要度 2

<説明>
正規表現を使用してファイルおよびテキストデータを操作できる。
これには、いくつかの表記要素から成る簡単な正規表現の作成も含まれる。
また、正規表現ツールを使用して、ファイルシステムまたはファイルの内容からの検索を実行することも含まれる。

<主要な知識範囲>
・いくつかの表記要素から成る簡単な正規表現を作成する
・正規表現ツールを使用して、ファイルシステムまたはファイルの内容からの検索を実行する

<重要なファイル、用語、ユーティリティ>
・grep
・egrep
・fgrep
・sed
・regex(7)

■例題
以下のテキストファイル 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研究室 大野 公善

ページトップへ