Linuxでテキストの検索で正規表現/拡張正規表現を使用する!(grep -G/grep -E)

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)