gpt4 book ai didi

perl - 删除行: after pattern1 and between pattern2 and pattern3 using awk/sed/perl

转载 作者:行者123 更新时间:2023-12-04 13:33:45 26 4
gpt4 key购买 nike

我需要从文件中删除模式2和pattern3 之间pattern1 和之后的行,如下所示:

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/pattern2pattern3之间的行范围
  • /pattern2/b;/pattern3/b;跳过pattern2pattern3行,这些行不包括在范围内(请参阅the sed faq)
  • d删除
  • 范围内的其他行

    更新

    根据注释,可以重写内部块:
    //!d

    在哪里:
  • //(一个空模式)与上次使用的正则表达式匹配(本例中为pattern2pattern3
  • !反转下一个命令,以便它适用于除与
  • 模式匹配的行以外的所有内容
  • d删除这些行

  • 因此,完整的重写模式是:
    /pattern1/,$ {
    /pattern2/,/pattern3/ {
    //!d
    }
    }

    关于perl - 删除行: after pattern1 and between pattern2 and pattern3 using awk/sed/perl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959982/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com