有人可以解释为什么这会按预期工作:
echo "one\ntwo\nthree\n" | awk '{if (gsub(/one/,"")) { print } else {print $0}}'
two
three
echo "one\ntwo\nthree\n" | awk '{if (gsub(/four/,"")) { print } else {print $0}}'
one
two
three
但这不是吗?
echo "one\ntwo\nthree\n" | awk '{if (gsub(/one/,"")) { print }}'
类似地,如果尝试链接多个替换,则要求所有替换都返回发生替换的非零计数,然后才打印更改后的结果,否则打印原始内容:
echo "one\ntwo\nthree\n" | awk '{if (gsub(/one/,"") && gsub(/two/,"")) { print } else {print $0}}'
我正进入(状态:
two
three
我期望的地方:
three
我在这里想念什么?来自任何其他编程语言,我希望这能够“正常工作”。请注意,我在 BSD 和 GNU awk 中观察到相同的行为。
编辑:
我认为这与 awk 如何处理多行输入有关:
echo "one\ntwo\nthree\n" | awk '{if (gsub(/one/,"")) print "found"; else print "not found" }'
found
not found
not found
not found