这是一个很好的答案。 /sf/answers/471752921/ 但我还是有点困惑。
没有a变量,awk '/^nameserver/ { printf("nameserver 127.0.0.1\n")} {print}' file2将得到:
# Generated by NetworkManager
domain dhcp.example.com
search dhcp.example.com
nameserver 127.0.0.1
nameserver 10.0.0.1
nameserver 127.0.0.1
nameserver 10.0.0.2
nameserver 127.0.0.1
nameserver 10.0.0.3
Run Code Online (Sandbox Code Playgroud)
尝试了几种组合后,我发现我必须使用
awk '/^nameserver/ && !a { printf("nameserver 127.0.0.1\n"); a=1 } {print}' file2
但我仍然对停止重复的功能!a感到困惑。a=1printf("nameserver 127.0.0.1\n")
将变量命名already_inserted为a,这样就会变得清晰起来。然后它读起来像:
if my_pattern matches and not already_inserted { insert "some text"; already_inserted=true; }
Run Code Online (Sandbox Code Playgroud)
awk将为每一行运行此命令。