goodbyegangsterのブログ

備忘録的な

sedコマンドで、正規表現で一致した値を再利用して置換する

置換対象の文字列の箇所にて、再利用したい文字列を () で囲むと、置換後文字列にて、値を再利用できます。置換後文字列の部分にて、再利用したい文字を \1 \2 みたく指定してあげます。知らなかったのでメモ。

こちらのQiitaの記事を参考にさせて貰いました。

ワンライナーでお手軽実行可能なsed入門 - Qiita

例。 YYYYMMDDHHMMSS となっているタイムスタンプを、タイムゾーン情報を付与して整形しています。 () を利用する時は、エスケープ文字を置かないといけないので、非常に分かりづらくなる。

$ echo "001,20180508113500,AAAAAAAA,20200508113500" | sed -e "s/,\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\(,\|$\)/,\1-\2-\3 \4:\5:\6+900\7/g"
001,2018-05-08 11:35:00+900,AAA,2020-05-08 11:35:00+900