Linuxでテキストの検索で正規表現/拡張正規表現を使用します。
記事の目次
基本の正規表現の代表例を試してみる!
基本の正規表現の代表例を、「grep -G」コマンドで試してみます。
基本の正規表現を使用する!(行頭:^)
行頭は、「^」で表現します!
$ grep -G ^root /etc/passwd root:x:0:0:root:/root:/bin/bash
基本の正規表現を使用する!(行末:$)
行末は、「$」で表現します!
$ grep -G t$ /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt
基本の正規表現を使用する!(いずれかの文字:[...])
いずれかの文字は、[...]で囲みます。囲まれた文字のどれか1文字にマッチします。以下の例では、[r]ootと[h]ootがマッチしました。
$ grep -G [a-zA-Z0-9]oot /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin setroubleshoot:x:991:984::/var/lib/setroubleshoot:/sbin/nologin
基本の正規表現を使用する!(直前の文字が0回以上:*)
特定の文字が0回以上は、「*」を使用します。「\」でエスケープしたほうが確実です。本当は、1文字以上で指定したいことが多く、少し使いづらいかもしれません。
$ grep -G usradm0\* /etc/passwd usradmin:x:1000:1000::/home/usradmin:/bin/bash usradm01:x:1001:1001::/home/usradm01:/bin/bash usradm02:x:1002:1002::/home/usradm02:/bin/bash
拡張正規表現の代表例を試してみる!
拡張正規表現の代表例を、「grep -E」コマンドで試してみます。
拡張正規表現を使用する!(直前の文字が0回か1回以上:+)
特定の文字が0回が1回は、「?」を使用します。
$ grep -E usradm0? /etc/passwd usradmin:x:1000:1000::/home/usradmin:/bin/bash usradm01:x:1001:1001::/home/usradm01:/bin/bash usradm02:x:1002:1002::/home/usradm02:/bin/bash
拡張正規表現を使用する!(直前の文字が1回以上:+)
特定の文字が1回以上は、「+」を使用します。
$ grep -E usradm0+ /etc/passwd usradm01:x:1001:1001::/home/usradm01:/bin/bash usradm02:x:1002:1002::/home/usradm02:/bin/bash usradm02:x:1002:1002::/home/usradm02:/bin/bash
おわりに
正規表現は、人間にとってはわかりにくいところがありますが、コンピュータにとっては処理しやすい表現形式です。正規表現を使いこなせば、複雑な文字列のパターンをまとめて短い表現でマッチさせることができます。
関連記事
関連書籍(Amazon)