我有以下类似更改日志的文件
#1.2.3
#InsertPart
#1.2.2
或者
#1.2.3
#InsertPart
- something
#1.2.2
期望的输出是
#1.2.3
#InsertPart
- new inserted line
#1.2.2
或者
#1.2.3
#InsertPart
- new inserted line
- something
#1.2.2
我可以使用以下脚本在 #InsertPart 之后插入一行
awk '1;!inserted && /# InsertPart/{c=2}c && !--c{print "- new inserted line"; inserted=1}'
#x.x.x
但只有当模式位于下一行时,我才坚持插入空行。所以我以以下输出结束
#1.2.3
#InsertPart
- new inserted line
#1.2.2
答案1
我认为问题在于您首先打印该行,然后决定进行其他处理,而不是先执行插入操作然后打印该行。
您想要在魔术标记之后插入新内容 2 行,并且如果该行以 开头,您还想在其中添加一个空行#
。
awk '/#InsertPart/ { c = 3 }
--c == 0 { print "- new inserted line" }
c == 0 && /^#/ { print "" }
{print $0}'
我以直接的方式编写代码,而不是最短的方式(例如“{print $0}”而不是“1”),以使其更清晰。递减--c == 0
c 并将 c 的新值与 0 进行比较。
答案2
试试这个
awk -v line='- new inserted line' '/#InsertPart/ {printf "%s\n\n%s\n", $0, line; next}; 1' yourfilename