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

linux – 如何使用sed或Perl删除多行块中的部分行?

发布时间:2020-12-14 00:33:47 所属栏目:Linux 来源:网络整理
导读:我有一些看起来像这样的数据.它有四个块.每个块都以@字符开头. @SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27AAAAAAAAAAAAAAAAAAAAAAAAAAA+SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27::::::::::::::::::::::::;;8@SRR037212.2 FC30L5TAA
我有一些看起来像这样的数据.它有四个块.每个块都以@字符开头.

@SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27
AAAAAAAAAAAAAAAAAAAAAAAAAAA
+SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27
::::::::::::::::::::::::;;8
@SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27
TATAACCAGAAAGTTACAAGTAAACAC
+SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27
888888888888888888888888888

在每个块的第三行,我想删除字符后面的文本,导致:

@SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27
AAAAAAAAAAAAAAAAAAAAAAAAAAA
+
::::::::::::::::::::::::;;8
@SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27
TATAACCAGAAAGTTACAAGTAAACAC
+
888888888888888888888888888

在sed或Perl中有一个紧凑的方法吗?

解决方法

如果第一行或第二行中永远不存在a并且第三行总是存在一个:

perl -0100pi -e's/+.*/+/' datafile

除此以外:

perl -0100pi -e's/^((?:.*n){2}.*?+).*/$1/' datafile

或者在5.10上:

perl -0100pi -e's/^(?:.*n){2}.*?+K.*//' datafile

所有那些假设@只出现在一个块的开头.如果它可能出现在其他地方,那么:

perl -pi -e's/+.*/+/ if $. % 4 == 3' datafile

(编辑:李大同)

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

    推荐文章
      热点阅读