使用awk更改与定界符之间的模式匹配的线

|| 我有一个类似这样的输入文件:
some line
some other line
another line
start_delimiter
  interesting stuff
  more interesting stuff
  even more interesting stuff
end_delimiter
possibly more stuff
我想操纵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
我可以这样在分隔符之间获取文本部分:
awk \'/start_delimiter/,/end_delimiter/\' inputfile
如果将其通过管道传输到另一个awk,则可以更改我感兴趣的行:
awk \'/more/ {sub(/^/,\"//\")}1\'
我不确定的是如何返回并用新内容替换定界部分。有任何想法吗?一线制的奖励积分。     
已邀请:
/start_delimiter/ {inblock=1}
/end_delimiter/ {inblock=0;}
{ if (inblock==1 && (/more/)) { print \"//\" $0 } else print $0}
    
对于一名班轮狂热者:
awk \'/^(start_delim|end_delim)/{f=f?0:1}f&&/more/{$0=\"//\" $0}1\' file
如果行定界符嵌入行中间,则增加了行“ 6”锚点的开头,以避免混淆。     
你需要像
awk \'/start_delimiter/,/end_delimiter/{
  if ($0 ~ /^more/ ) { print \"//\" $0 } 
  else print $0
}
!/start_delimiter/,/end_delimiter/ print $0\' inputfile
第二个范围模式是打印超出范围的其他行(由前导\!指定)(我目前无法测试它,因此请尝试移动\'!\ '周围,如果它不能像这样) 我希望这有帮助。     

要回复问题请先登录注册