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

echo 'abcd_efg_hijk_l_m_n_opqr' | grep -o -E "^[a-z].+?_"

上記の結果が、期待する
abcd_
になりません。

なぜか、
abcd_efg_hijk_l_m_n_
になります。


egrepでも同じでした。

phpでのpreg系ではabcd_をマッチ結果として返してきます。

linuxのgrepでこのような結果になるのはなぜですか?
よろしくお願いします。

A 回答 (3件)

grepのオプションで


-E : 拡張正規表現(POSIX)
ではなく
-P : perl互換正規表現
ではどうでしょう。

参考) 正規表現で使用可能な演算子の一覧
http://www.kt.rim.or.jp/~kbk/regex/regex.html#EG …
http://www.kt.rim.or.jp/~kbk/regex/regex.html#PCRE

もし -P オプションが実装されていないならば、
いっそのこと grep の代わりに perl を使うのも手です。
    • good
    • 0

>linuxのgrepでこのような結果になるのはなぜですか?



正規表現にも色々仕様があってphpのpreg系とgrepではその仕様が異なるから。
なので#1の方がいわれてるようにマニュアルを読んでください。
    • good
    • 0

とりあえずマニュアルを読む.

    • good
    • 0

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