LinuCレベル1 101試験の例題と解説
1.03.4正規表現を使用したテキストファイルの検索
LinuCレベル1 101試験の出題範囲から「1.03.4 正規表現を使用したテキストファイルの検索」についての例題を解いてみます。
ここでは、ファイル内容からの検索ついて確認しておきましょう。
例題
以下のテキストファイルtext.txtから、1行目と2行目を検索して出力するコマンドをすべて選択してください。
test
Test
(T|t)est
- grep -E '(T|t)est' text.txt
- grep '(T|t)est' text.txt
- grep '[tT]est' text.txt
- 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コマンドを使用することも可能 |
-P | : | Perl形式の正規表現で検索 |
検索パターンに使用可能な正規表現は、以下になります。
基本正規表現(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研究室 上野 貴博