Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

awkのgsub/sub関数でマッチした文字の前後に細工をしたい場合

awkのgsub/sub関数でマッチした文字の前後に細工をしたい場合、
マッチした文字をキャプチャしてくれるのは"&"です。

実際のところ

たとえばgsubなら

$ echo 12345678 | awk 'gsub(/[0-9][0-9]/, "&-")'
12-34-56-78-

$ echo abc | awk ' gsub(/あ*/, " // &")'
 // a // b // c // 

subならこう

$ echo 12345678 | awk 'sub(/[0-9][0-9]/, "&-")'
12-345678

単に先頭なり末尾なりに文字を加えたいだけなら、
存在し得ない文字に"*"*1をくっつけてこんな手も。

$ echo abc | awk ' gsub(/^あ*/, " - ")'
 - abc

$ echo abc | awk ' gsub(/あ*$/, " // ")'
abc // 
$ echo abc | awk ' gsub(/あ*/, " // ")'
 // a // b // c // 

*1:ゼロ個以上適用