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

主題1.03GNUとUnixのコマンド

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

このエントリーをはてなブックマークに追加

LinuCレベル1101試験の出題範囲から「1.03.4 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。ここでは、範囲指定を用いた検索について確認しておきましょう。

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


例題

以下の内容が書かれたファイル(text.txt)を検索して、TEXT00の後ろに続く文字が1~5の行を出力させる正しいコマンドを選択してください。

text.txt

TEXT001
TEXT002
TEXT003
TEXT004
TEXT005
TEXT006
TEXT007
TEXT008
TEXT009
TEXT010

  1. grep "TEXT00[1 5]" text.txt
  2. cat text.txt | grep [1-5]
  3. cat text.txt | grep [12345]
  4. grep "TEXT00[1-5]" text.txt

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


例題と解説

正解は、「4. grep "TEXT00[1-5]" text.txt」です。

[]はカッコ内に入力されたいずれかの文字でマッチさせる正規表現です。以下のように-と組み合わせることで範囲を指定して検索することができます。

範囲指定の一例

[0-9] 数字の0から9にマッチする行を出力する
[a-z]英字のaからzにマッチする行を出力する
[A-Z]英字のAからZにマッチする行を出力する
[0-9a-z]数字の0から9と英字のaからzにマッチする行を出力する
[0-9A-Z]数字の0から9と英字のAからZにマッチする行を出力する

また、[]の中に並べて文字を入力することで、それぞれにマッチする行を出力することもできます。

[134]数字の1、3、4にマッチする行を出力する
[ace]英字のa、c、eにマッチする行を出力する

選択肢の解説は以下です。

「1. grep "TEXT00[1 5]" text.txt」
TEXT00の後に1と空白と5が続いている文字にマッチする行が出力されるため、不正解です。
出力結果は以下です。

$ grep "TEXT00[1 5]" text.txt
TEXT001
TEXT005

「2. cat text.txt | grep [1-5]」
1から5にマッチする行が出力され、TEXT010が含まれてしまうため不正解です。

$ cat text.txt | grep [1-5]
TEXT001
TEXT002
TEXT003
TEXT004
TEXT005
TEXT010

「3. cat text.txt | grep [12345]」
1から5にマッチする行が出力され、TEXT010が含まれてしまうため不正解です。

$ cat text.txt | grep [12345]
TEXT001
TEXT002
TEXT003
TEXT004
TEXT005
TEXT010

「4. grep "TEXT00[1-5]" text.txt」
TEXT00の後ろに続く文字列に対して、1から5の範囲指定を行っており、TEXT010は含まれず正しい結果が表示されるため、正解です。

$ grep "TEXT00[1-5]" text.txt
TEXT001
TEXT002
TEXT003
TEXT004
TEXT005

正規表現を利用したファイル内検索は、システムのログ管理や設定確認等で幅広く利用することができます。
たくさんの正規表現が利用できるように覚えておきましょう。


例題作成者

株式会社デージーネット OSS研究室 勝山 遼

ページトップへ