• ベストアンサー

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

特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「最短一致」があれば s/.*xxxxx\(.*?\)yyyyy.*/\1/ なんだろうけど, GNU sed にはそんな便利なものはないので... ん~, この場合だと s/.*xxxxx\(\(y\{0,4\}[^y]\)*\)yyyyy.*/\1/p でいいのかなぁ? もちろんもっと一般的な場合にはより面倒.

tyoutikaramizu
質問者

お礼

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

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

sedやgrepは最長マッチなので、最短マッチはpealを使うことが多いのでは? あんまり詳しくないですが、こんな感じ perl -pe's/.*xxxxx(.*?)yyyyy.*/\1/'

tyoutikaramizu
質問者

お礼

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

関連するQ&A