LinuCレベル1 101試験の例題と解説
1.03.4正規表現を使用したテキストファイルの検索
今回は、LinuC 101試験の試験範囲から「1.03.4 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。
grep,egrep,fgrepの違いについて取り上げます。
例題
以下のテキストファイル sample.txt から ^apple という文字列を含む行だけを表示するためのコマンドを2つ選択してください。
[sample.txt]
apple:100
^apple:200
apple$:300
- grep '^apple' sample.txt
- fgrep '^apple' sample.txt
- egrep '^apple' sample.txt
- 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の違いや正規表現の指定方法を把握しておきましょう。