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

bash – 删除所有行,在/ pattern /之后开始两行

发布时间:2020-12-15 21:35:33 所属栏目:安全 来源:网络整理
导读:想象一下,我有一个文件如下: drinkeatXXXpizzablunznsushi 我想删除文件中的所有行,从模式XXX之后的第三行开始,因此结果应如下所示: drinkeatXXXpizzablunzn 删除XXX后的所有行很简单: sed -e '/XXX/q' -i data.txt 但是,我发现在删除模式后很难跳过固定
想象一下,我有一个文件如下:

drink
eat
XXX
pizza
blunzn
sushi

我想删除文件中的所有行,从模式XXX之后的第三行开始,因此结果应如下所示:

drink
eat
XXX
pizza
blunzn

删除XXX后的所有行很简单:

sed -e '/XXX/q' -i data.txt

但是,我发现在删除模式后很难跳过固定数量的行.

到目前为止我想出的最好的是:

sed -e '/XXX/ { N; N; q }' -i data.txt

有没有比添加n * N更优雅的东西(想象一下,我想跳过50行)?

解决方法

这可能适合你(GNU sed):

sed '/pattern/{:a;N;s/n/&/2;Ta;q}' file

在遇到所需的模式时,循环所需的行然后退出.

对于遵循所需模式的50行,使用:

sed '/pattern/{:a;N;s/n/&/50;Ta;q}' file

(编辑:李大同)

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

    推荐文章
      热点阅读