読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

awk

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:ゼロ個以上適用