プロが教える店舗&オフィスのセキュリティ対策術

こんにちは、いつもお世話になっております。

タイトルの通りなのですが、
連続する0~9の数字が3桁と4桁の行が
入り混じっているテキストに対して、
3桁のもののみをgrepしたいのですが、
上手く行きません。

この場合の正規表現はどのようにすれば
良いでしょうか?

ちょっと稚拙かも知れませんが、
1時間ぐらい錯綜しています。

何卒よろしくお願いします。

A 回答 (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

という出力が得られました。これでよろしいでしょうか。
    • good
    • 0
この回答へのお礼

ご回答、有難う御座います。

ご案内頂いたコマンドで、問題は解決致しました。
非常に助かりました。

これで、正確なデータベースが作れます。

お礼日時:2005/11/02 02:39

> 「|」とカッコによるグルーピングが使えれば、まとめて1つの正規表現にできます。

grepで通用するかどうか分かりませんが

egrep なら大丈夫ですよ。

この回答への補足

補足有難う御座います。

egrepも試してみたのですが、成功しませんでした。
ちょっと弱りました・・・

補足日時:2005/10/31 22:24
    • good
    • 0

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で代用可能かも。これも正規表現のレベル次第なのですが。

この回答への補足

ご回答有難う御座います。

しかし、残念ながら
全て試してみたのですが、どれも成功しませんでした。

補足日時:2005/10/31 22:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!