正規表現で grep 検索を便利に その3

サーバー設定に便利になりそうだったので、
正規表現をあれこれやっていますが
文字クラスの範囲指定が思いつかないので
日経Linux 2011-03 の記事を参考にします
そして、今回はサンプルファイルとして、costomer.txt
というファイルを使います
内容は
1:山田太郎:男:43:東京
2:井上直子:女:19:埼玉
3:山本真一:男:43:福岡
4:千葉信夫:男:16:東京
5:秋山敬一郎:男:44:秋田
101:藤本信:男:40:東京
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
というものです
ここから、東京に住んでいる人だけを調べます
grep “:[東].$” costomer.txt
これを実行すると
1:山田太郎:男:43:東京
4:千葉信夫:男:16:東京
101:藤本信:男:40:東京
となります
$ は行末、そして . は任意の文字数になります
今回は :[東].$ なので、
意味は行末より2つ左の文字で、東を含むものを検索するという意味になります
また、通常は ^ は行頭を意味しますが
[] の中に記述すると、~でないという意味になります
例えば
grep “:[^東].$” costomer.txt
とすると、
2:井上直子:女:19:埼玉
3:山本真一:男:43:福岡
5:秋山敬一郎:男:44:秋田
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
というように、東京に住んでいない人がでます
また、年齢で検索するという場合には
grep “:[3][0-9]:” costomer.txt
とすることで、30代の人を割り出すこともできます
最初の [3] で3を含む
そして
[0-9] で0~9までの数値、つまりこれで30代になります
もちろん複数指定も可能です
grep “:[13][0-9]:” costomer.txt
とすれば、10代と30代がでてきます
2:井上直子:女:19:埼玉
4:千葉信夫:男:16:東京
102:加藤純子:女:35:千葉
あまり使い道はないように見えますが
テキストエディタで、メモしたときには検索するときに役立つと思います
例えば、お小遣いの記録とかには使えそうです
ちなみに、指定する時には名前付文字クラスで代用できます
主なものとして
[:alnum:]
すべてのアルファベット、10進数を示す
つまり
0-9A-Za-z を指定したのと同じ意味
[:alpha:]
すべてのアルファベット
つまり
A-Za-z と同じ
[:blank:]
空白文字
これは
スペースやタブなど
[:digit:]
10進数の文字
0-9 と同じ
[:lower:]
アルファベットの小文字
a-z と同じ
[:upper:]
アルファベットの大文字
A-Z と同じ
[:space:]
空白文字
こちらは、スペース、タブ、そして改行
[:xdigit:]
16進数につかう文字
0-9A-Fa-f と同じ
ちなみに、使うときには
[] で囲って
[[digit:]] というように使います
今回のように10~30代を調べるには
grep “:[13][[:digit:]]:” costomer.txt
とします
もちろん意味は変わらないので
2:井上直子:女:19:埼玉
4:千葉信夫:男:16:東京
102:加藤純子:女:35:千葉
と表示されます

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です