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

特定文字列間の文字列の抽出の際についての質問なのですが、

xxxxxaiueoyyyyyaiueoyyyyy
となっている場合aiueoだけを抽出したいのですが、

sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p'
とすると
aiueoyyyyyaiueo
が出力されてしまいます。

エンド文字が複数あった場合最初にマッチしたものまでの抽出は
どのようにしたら宜しいのでしょうか?

A 回答 (2件)

「最短一致」があれば


s/.*xxxxx\(.*?\)yyyyy.*/\1/
なんだろうけど, GNU sed にはそんな便利なものはないので... ん~, この場合だと
s/.*xxxxx\(\(y\{0,4\}[^y]\)*\)yyyyy.*/\1/p
でいいのかなぁ? もちろんもっと一般的な場合にはより面倒.
    • good
    • 0
この回答へのお礼

こちらでも出来るようになりましたが、
なぜそうなるのかはまだ少し理解に苦しみます。
理解できるよう努力致します。有難う御座いました!

お礼日時:2010/09/14 15:15

sedやgrepは最長マッチなので、最短マッチはpealを使うことが多いのでは?


あんまり詳しくないですが、こんな感じ

perl -pe's/.*xxxxx(.*?)yyyyy.*/\1/'
    • good
    • 1
この回答へのお礼

有難う御座いました。
とても参考になります。

お礼日時:2010/09/14 15:13

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