You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Unix中删除两指定模式间所有行的问题求助

解决Unix下删除XYZ开头行到ZZZZZ结尾行区间的问题

你的问题出在两个地方:一是用-pe逐行处理文件,没法跨多行匹配区间;二是替换时刻意保留了开头的XYZ,自然删不掉这行。下面给你两种可行的解决办法:

方法一:用Perl一次性处理整个文件

用-0777参数让Perl把整个文件读成一个字符串,这样就能跨多行匹配目标区间,然后直接把整个区间替换为空:

perl -0777 -pe 's/(^|\n)XYZ.*?ZZZZZ(\n|$)//ms' filename
  • -0777:读取整个文件为单字符串,支持跨多行匹配
  • ms修饰符:m让^/$匹配行首/行尾,s让.匹配换行符
  • 正则里的(^|\n)和(\n|$)是为了处理目标区间在文件开头或结尾的情况,避免多删或漏删换行

方法二:用awk逐行控制输出

awk处理行级逻辑更直观,通过一个标记变量控制是否输出行:

awk '/^XYZ/ { skip=1; next } /ZZZZZ$/ { skip=0; next } !skip' filename

逻辑很简单:

  • 遇到以XYZ开头的行,开启跳过模式,不输出该行
  • 遇到以ZZZZZ结尾的行,关闭跳过模式,不输出该行
  • 其他非跳过状态的行正常输出

内容的提问来源于stack exchange,提问作者Bbabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:25:08