ablog

不器用で落着きのない技術者のメモ

Perlワンライナーで後方参照

perl -ple "s/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})/TO_DATE\(\'\1\',\'YYYYY-MM-DD HH24:MI:SS\'\)/g;" hoge.csv

後方参照って $1 だと思ったけどうまくいかないので、\1 にしたたうまくいった。

パターン内で括弧を使用することで、括弧内のパターンにマッチする部分文字列が記憶されます。記憶された部分文字列はパターンマッチが完了すると変数「$1」などに格納されプログラムの中で利用することが出来ます。

このパターンにマッチし記憶された部分文字列をパターン内でも参照することが可能です。このように記憶された部分文字列をパターン内で参照することを後方参照と呼んでいます。記憶された部分文字列は最初に記憶された内容は「\1」、次に記憶された内容は「\2」のように参照することが可能となります。

後方参照によるパターン内での参照(¥1, ¥2, ..) - マッチした部分の取得 - Perlにおける正規表現

このワンライナーの場合、パターン内で参照することになるのかな?