- ベストアンサー
Cygwinの正規表現
こんにちは、いつもお世話になっております。 タイトルの通りなのですが、 連続する0~9の数字が3桁と4桁の行が 入り混じっているテキストに対して、 3桁のもののみをgrepしたいのですが、 上手く行きません。 この場合の正規表現はどのようにすれば 良いでしょうか? ちょっと稚拙かも知れませんが、 1時間ぐらい錯綜しています。 何卒よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
---- test.txt ---- aaa998 999bbb aaa000bbb 111 aaa1001 1002bbb aaa1003bbb aaa1004bbb 2222 に対して、 egrep '(^|[^0-9])[0-9]{3}($|[^0-9])' test.txt で aaa998 999bbb aaa000bbb 111 という出力が得られました。これでよろしいでしょうか。
その他の回答 (2)
- oldroot2005
- ベストアンサー率66% (68/103)
> 「|」とカッコによるグルーピングが使えれば、まとめて1つの正規表現にできます。grepで通用するかどうか分かりませんが egrep なら大丈夫ですよ。
補足
補足有難う御座います。 egrepも試してみたのですが、成功しませんでした。 ちょっと弱りました・・・
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
grepで扱える正規表現のレベルが分からないので最も基本的なものだけ使用しますと、数字が3文字連続するものは [0-9][0-9][0-9] ですね。 このままでは数字4文字以上のものも該当するので、前後に数字が来ないものだけに限定すると [^0-9][0-9][0-9][0-9][^0-9] となります。 これだと数字3文字が行頭や行末にあると困るので、それも含めるには・・・「|」を使って複合条件にすればよいですが、基本的な正規表現だけでやるとすれば、 [^0-9][0-9][0-9][0-9][^0-9] ^[0-9][0-9][0-9][^0-9] [^0-9][0-9][0-9][0-9]$ ^[0-9][0-9][0-9]$ と4回、grepを行うというのも分かりやすくて良いでしょう。それぞれ「行中に数字3桁」、「行頭に数字3桁」、「行末に数字3桁」、「1行に数字3桁のみ」です。 「|」とカッコによるグルーピングが使えれば、まとめて1つの正規表現にできます。grepで通用するかどうか分かりませんが (^|[^0-9])[0-9][0-9][0-9]($|[^0-9]) のような感じ。 [0-9]は\dで代用可能かも。これも正規表現のレベル次第なのですが。
補足
ご回答有難う御座います。 しかし、残念ながら 全て試してみたのですが、どれも成功しませんでした。
お礼
ご回答、有難う御座います。 ご案内頂いたコマンドで、問題は解決致しました。 非常に助かりました。 これで、正確なデータベースが作れます。