- ベストアンサー
特定文字列間の文字列の抽出の際についての質問なのですが、
特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「最短一致」があれば s/.*xxxxx\(.*?\)yyyyy.*/\1/ なんだろうけど, GNU sed にはそんな便利なものはないので... ん~, この場合だと s/.*xxxxx\(\(y\{0,4\}[^y]\)*\)yyyyy.*/\1/p でいいのかなぁ? もちろんもっと一般的な場合にはより面倒.
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.2
sedやgrepは最長マッチなので、最短マッチはpealを使うことが多いのでは? あんまり詳しくないですが、こんな感じ perl -pe's/.*xxxxx(.*?)yyyyy.*/\1/'
質問者
お礼
有難う御座いました。 とても参考になります。
お礼
こちらでも出来るようになりましたが、 なぜそうなるのかはまだ少し理解に苦しみます。 理解できるよう努力致します。有難う御座いました!