加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

删除行:在pattern1之后以及在pattern2和pattern3之间使用awk /

发布时间:2020-12-14 02:07:14 所属栏目:Linux 来源:网络整理
导读:我需要删除文件中的行,这些行在pattern1之后以及在模式2和pattern3之间,如下所示: aaaaaaaa bbbbbbbbpattern1 -----After this linecdedededddedededpattern2fefefefe -----Delete this lineefefefef -----Delete this linepattern3adsffdsdhuaserew 请问您
我需要删除文件中的行,这些行在pattern1之后以及在模式2和pattern3之间,如下所示:

aaaaaaaa 
bbbbbbbb
pattern1   <-----After this line
cdededed
ddededed
pattern2
fefefefe   <-----Delete this line
efefefef   <-----Delete this line
pattern3
adsffdsd
huaserew

请问您可以建议如何使用awk或sed或perl来完成此操作.

解决方法

sed '/pattern1/,${ /pattern2/,/pattern3/{/pattern2/b; /pattern3/b; d;} };' file

格式:

/pattern1/,${
    /pattern2/,/pattern3/ {
        /pattern2/b;
        /pattern3/b; 
        d;
    } 
}

解释:

> / pattern1 /,$是pattern1到文件末尾之后的行范围
> / pattern2 /,/ pattern3 /是pattern2和pattern3之间的行范围
> / pattern2 / b;和/ pattern3 / b;跳过另外包含在范围内的pattern2和pattern3行(参见the sed faq)
> d删除范围中的其他行

更新

从注释中,可以重写内部块:

//!d

哪里:

> //(空模式)匹配最后使用的正则表达式(在这种情况下是pattern2和pattern3)
>!反转下一个命令,使其适用于除匹配模式的线以外的所有内容
> d删除这些行

所以完整的,重写的模式是:

/pattern1/,/pattern3/ {
        //!d
    } 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读