FC2ブログ

正規表現で 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:千葉
と表示されます

スポンサーサイト



テーマ : Linux
ジャンル : コンピュータ

コメント

非公開コメント

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック