我知道可以用和喜欢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