拡張正規表現と egrep その3

今回は、複数の正規表現を組み合わせてみました
1:山田太郎:男:43:東京
2:井上直子:女:19:埼玉
3:山本真一:男:43:福岡
4:千葉信夫:男:16:東京
5:秋山敬一郎:男:44:秋田
100:藤本信:男:40:東京
101:藤本信:男:40:東京
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
という内容の costomer.txt というファイルを使い
最初の会員番号を示すフィールドから
指定した会員番号のところを表示するようにします
egrep “^(1|5|103):” costomer.txt
とします
 
結果は
1:山田太郎:男:43:東京
5:秋山敬一郎:男:44:秋田
103:福岡勲:男:41:香川
となります
“^(1|5|103):”
というように、^ の後を囲うことで、行頭の数字になるように
設定しています
もし、”^1|5|103 とすると
最初は目論見どおりですが
後の5 103 は行頭の指定が反映されません
このため、任意のところにしたいときには()での指定が
必要になります
また、egrep のオプションで -o をつけると
マッチする部分のみ表示することも可能です
egrep -o “^(1|5|103):” costomer.txt
とすると
1:
5:
103:
となります
これは、スクリプトなどで修正したときに確認するのに使えそうです
また、このマッチする部分というところを利用して
範囲指定もできます
egrep -o “[0-9].*[0-9]” costomer.txt
とすれば、数字に囲まれている間だけを表示できます
1:山田太郎:男:43
2:井上直子:女:19
3:山本真一:男:43
4:千葉信夫:男:16
5:秋山敬一郎:男:44
100:藤本信:男:40
101:藤本信:男:40
102:加藤純子:女:35
103:福岡勲:男:41
104:桂井昭宏:男:53
応用すれば、単語で範囲指定とかもできそうです

拡張正規表現と egrep その2

引き続き、拡張正規表現 egrep についてです
今回は、会員番号で検索するというのをやってみます
使用するファイルは
costomer.txt
です
内容は
1:山田太郎:男:43:東京
2:井上直子:女:19:埼玉
3:山本真一:男:43:福岡
4:千葉信夫:男:16:東京
5:秋山敬一郎:男:44:秋田
101:藤本信:男:40:東京
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
となっています
それでは、会員番号3桁のところだけを調べます
egrep “^[0-9]{3}:” costomer.txt
これで
101:藤本信:男:40:東京
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
となります
まず、最初の^で行頭を意味し
次の [0-9] で 0~9まで
そして {3} で3回繰り返す
つまり、100~999までになります
また、ゾロ目の数値だけを取り出すこともできます
今回は
年齢のフィールドを対象にして年齢がゾロ目の人を表示します
ゾロ目を表示するには、
文字列を()で囲ってグループ化し
さらに
\1 を使って後方参照します
後方参照は \1 を使ってのグループ呼び出しです
egrep “:([0-9])\1” costomer.txt
を実行すると
5:秋山敬一郎:男:44:秋田
となります
この
([0-9])\1
の部分がゾロ目を意味しています

拡張正規表現と egrep

拡張正規表現は、標準の正規表現にメタキャラを追加し
より柔軟なパターンを追加したものです
以下は、egrep だけで使える正規表現の一例です
?
直前の正規表現の0回もしくは1回の繰り返し
+
直前の正規表現の化言い条の繰り返し
{n}
直前の正規表現のn回の繰り返し
{n,}
直前の正規表現のn回以上の繰り返し
{n,m}
直前の正規表現のn回~m回の繰り返し
正規表現1|正規表現2
いずれかのパターンにマッチ
(正規表現)
正規表現のグループ化
\n
グループ化された n番めの正規表現に
マッチした文字列を呼び出す
というようになります
日経 Linux 2011-03
に例題が載っていますので、明日以降
また例題をみながらやっていきます