質問: sedで「(~)」を使って文字列の一部を取り出し sedで「(~)」を使って、文字列の一部を取り出したいのですが期待した結果になりません。 以下のようなファイルがあります。 そこから、最初に見つかった「a-z0-9」を含む文字列を取り出したいのですが、 どうしても、2番目にでてくる「0-9」でなる文字列が取り出されます。 環境は、solaris/linuxになります。 ■ファイル cat aaa "aaa","bbb","ccc","123456","ddd","eee","fff,"0000","ggg" "aaa","bbb","ccc","aaa123","ddd","eee","fff,"0000","ggg" ■sed sed 's/.*,"\([a-z0-9].*[0-9]\)",.*$/\1/g' aaa ■結果 0000 0000 期待する結果は、 123456 aaa123 なのですが、 期待した結果を取り出すにはどうしたらよいのでしょうか。
回答: >しかし、呪文のようですね。 行頭を表す「^」と[ ]内部の否定を表す^、カンマ区切りとカンマ以外を示すための「,」が入り組んでいるのでパッと見訳わかりませんね(笑 私は、添付図のように考えました。 マッチした4番目の文字列で、行全体を置き換えるので、第4項目を取り出せます。 この正規表現では「データにカンマが含まれないものに限る」という条件が付くのも理解できるかと...。