我知道awk可以使用sub()和gsub()做文本/字符串替换:
kent$echo "fffff"|awk '{gsub("f", "b")}1'
bbbbb
要么
kent$echo "fffff"|awk '{gsub(/f/, "b")}1'
bbbbb
但是今天我写了一个错字,我写的是:
kent$echo "fffff"|awk '{gsub('f', "b")}1'
但是awk并没有抱怨那个,而是像往常一样产生输出,当然是意想不到的输出,我花了一点时间找出错误.输出awk给了我的是:
bfbfbfbfbfb
另一个例子:
kent$echo "fafafafafXX"|awk '{gsub('fa', "B")}1'
BfBaBfBaBfBaBfBaBfBXBXB
sub()的例子也是奇怪的:
kent$ echo "thanks in advance"|awk '{sub('a', "B")}1'
Bthanks in advance
有人可以解释一下,这个奇怪的替代是怎么做到的?
kent$ awk --version
GNU Awk 4.0.2
编辑
感谢Joni的回答.也许这个例子解释得更好,我只是在这里添加:
kent$ echo "thanks in advance"|awk '{f="k";sub('f', "B")}1'
thanBs in advance
kent$ echo "thanks in advance"|awk '{sub('th ank', "B")}1'
awk: cmd. line:2: {sub(th
awk: cmd. line:2: ^ unexpected newline or end of string