使用AWK删除文件中#start与#end之间的文本(含标记)
使用AWK删除指定标记区间的内容
问题说明
现有文件内容如下:
start of my file Some lines #start other lines blabla other lines #end end of my file
需要删除#start和#end之间的所有内容(包含这两个标记行),导出后的预期结果为:
start of my file Some lines end of my file
已知用awk '/#start/,/#end/'能选中区间内容,但不知道怎么实现删除;且要求必须用AWK完成,不接受sed方案。
解决方案
用下面这个带状态控制的AWK命令就能搞定:
awk ' /#start/ { skip=1; next } /#end/ { skip=0; next } !skip ' 你的输入文件名 > 输出文件名
命令解释
- 碰到
#start行时,设置skip变量为1(标记进入要删除的区间),并用next跳过当前行的输出 - 碰到
#end行时,把skip重置为0(标记退出删除区间),同样用next跳过当前行的输出 !skip的意思是:只有当skip为0的时候(也就是不在要删的区间里),才输出当前行
这个方法不管区间里有多少行都能准确处理,而且会把#start和#end本身也删掉,完全符合需求。
内容的提问来源于stack exchange,提问作者Antoine
相关产品推荐
相关产品推荐

