AWK 不匹配换\n
行gsub()。
只需更改下面的“草莓”水果条目。
与 sed 一起使用也很棒。
\n
正如您在此脚本中看到的那样,它会忽略:
cat << 'EOF' > ~/src
apple
fruit
strawberry
fruit
orange
fruit
blackberry
EOF
cat << 'EOF' > ~/scp.sh
#!/bin/bash
cat ~/src | awk '{ gsub("strawberry\nfruit", "strawberry\nfruitIsRed"); print }' > ~/trg
EOF
sh ~/scp.sh
diff ~/src ~/trg
# files are equals
答案1
因为 awk 的默认 RS(记录分隔符)是\n
ewline,所以 awk 永远不会\n
在任何地方看到 ewline 来替换它,因此您需要将 RS 设置为其他内容才能识别换行符,一种方法是将 RS 设置为空字符串(意味着记录是用空行而不是换行符分隔):
awk -v RS= '{ "do stuffs" }'
所以它不是特定于gsub()仅但依赖于RS。