Thi*_*Not 3 awk substitution delimiter
我有一个像这样的输入文件:
some line
some other line
another line
start_delimiter
interesting stuff
more interesting stuff
even more interesting stuff
end_delimiter
possibly more stuff
Run Code Online (Sandbox Code Playgroud)
我想操纵start_delimiter和end_delimiter之间与正则表达式匹配的行,并将结果写入输入文件.例如,将'//'添加到包含单词'more'的行的开头(只要这些行在分隔符之间):
some line
some other line
another line
start_delimiter
interesting stuff
//more interesting stuff
//even more interesting stuff
end_delimiter
possibly more stuff
Run Code Online (Sandbox Code Playgroud)
我可以通过这种方式在分隔符之间获取文本部分:
awk '/start_delimiter/,/end_delimiter/' inputfile
Run Code Online (Sandbox Code Playgroud)
如果我把它管道到另一个awk我可以改变我感兴趣的行:
awk '/more/ {sub(/^/,"//")}1'
Run Code Online (Sandbox Code Playgroud)
我不确定的是如何返回并用新内容替换分隔部分.有任何想法吗?单线的奖励积分.
小智 9
/start_delimiter/ {inblock=1}
/end_delimiter/ {inblock=0;}
{ if (inblock==1 && (/more/)) { print "//" $0 } else print $0}
Run Code Online (Sandbox Code Playgroud)
而对于一个队员狂热分子:
awk '/^(start_delim|end_delim)/{f=f?0:1}f&&/more/{$0="//" $0}1' file
Run Code Online (Sandbox Code Playgroud)
^如果块分隔符嵌入在行的中间,则添加行锚的开头以避免混淆.