AWK 与 gsub 上的换行符 \n 不匹配

AWK 与 gsub 上的换行符 \n 不匹配

AWK 不匹配换\ngsub()
只需更改下面的“草莓”水果条目。
与 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(记录分隔符)是\newline,所以 awk 永远不会\n在任何地方看到 ewline 来替换它,因此您需要将 RS 设置为其他内容才能识别换行符,一种方法是将 RS 设置为空字符串(意味着记录是用空行而不是换行符分隔):

awk -v RS= '{ "do stuffs" }'

所以它不是特定于gsub()仅但依赖于RS。

相关内容