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

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

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

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


例題

以下のテキストファイルtext.txtから、1行目と2行目を検索して出力するコマンドをすべて選択してください。

test
Test
(T|t)est

  1. grep -E '(T|t)est' text.txt
  2. grep '(T|t)est' text.txt
  3. grep '[tT]est' text.txt
  4. grep -E '.*est' text.txt

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


解答と解説

正解は、「1.grep -E '(T|t)est' text.txt」と「3.grep '[tT]est' text.txt」です。

grepはファイルから指定した検索パターンにマッチする行を表示するコマンドです。
正規表現を利用して、検索パターンを指定することが可能です。

grepコマンドの書式は以下の通りです。

grep [オプション] パターン [ファイル]

grepコマンドの主なオプションは以下の通りです。

オプション概要
-i大文字・小文字を区別せずに検索
-E拡張正規表現で検索、egrepコマンドを使用することも可能
-v不一致を検索
-n検索結果に行番号を表示
-F固定文字での検索、fgrepコマンドを使用することも可能
-PPerl形式の正規表現で検索

検索パターンに使用可能な正規表現は、以下になります。

基本正規表現(BRE:Basic Regular Expression)

grepコマンドのデフォルトの動作です。
メタキャラクタとして、*や[]などを利用することが可能です。

拡張正規表現(Extended Regular Expression)

grepコマンドにて、-Eオプションを指定する事で動作します。基本正規表現を拡張したものになっています。
メタキャラクタとして、()や|(パイプ)などが追加で利用できます。繰り返しのパターン検索など、基本正規表現と異なるものがあります。

Perl正規表現

grepコマンドにて、-Pオプションを指定することで動作します。
拡張正規表現をさらに拡張したものになっています。

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

1.grep -E '(T|t)est' text.txt
正解です。

-Eオプションを利用して、拡張正規表現で検索しています。
|(パイプ)は、OR条件を表すことが可能です。
実行結果は、以下のようになります。

$ grep -E '(T|t)est' text.txt
test
Test

また、egrepコマンドを利用することも可能です。その場合は、以下のような実行結果になります。

$ egrep '(T|t)est' text.txt
test
Test

2.grep '(T|t)est' text.txt
不正解です。

デフォルトである基本正規表現は、|(パイプ)を利用することができません。この選択肢では、(T|t)estに一致するパターンを検索します。
実行結果は、以下のようになります。

$ grep '(T|t)est' text.txt
(T|t)est

3.grep '[tT]est' text.txt
正解です。

[ ]内の文字列の部分一致を検索します。
実行結果は、以下のようになります。

$ grep '[tT]est' text.txt
test
Test

4.grep -E '.*est' text.txt
不正解です。

-Eオプションを利用して、拡張正規表現で検索しています。
.(ドット)と*(アスタリスク)を合わせて利用すると、任意の文字の0文字以上の繰り返しになります。
実行結果は、以下のようになります。

$ grep -E '.*est' text.txt
test
Test
(T|t)est

システム管理をするうえで、正規表現を利用したファイル検索はよく利用します。
正規表現の違いを理解して、素早く検索できるようにしましょう。


例題作成者

株式会社デージーネット OSS研究室 上野 貴博

ページトップへ