如何使用sed删除包含'-'的行及其前一行?
用sed删除含'-'的行及其前一行的正确方法
你之前用的sed -e '/-/-1d'语法错误,sed不支持这种直接引用匹配行前一行的写法,得靠模式空间的缓存机制来处理这种成对的标题+序列行。
正确命令
sed -n 'N; /-/{d}; P; D' your_file
逐部分解释
-n:关闭sed默认的自动输出,我们自己控制哪些行要打印N:把下一行拉进当前模式空间,此时模式空间里是两行(标题行+对应的序列行)/−/{d}:如果这两行里包含-,直接删掉这一对,不输出P:打印模式空间里的第一行(没问题的标题行)D:删掉模式空间里的第一行,剩下的序列行留在里面,下一轮循环时N会拉新的标题行进来,继续处理下一对
验证结果
输入文件:
>seq 1 GAA--ACGAA >seq 2 CATCTCGGGA >seq 3 GACG-CG-AG >seq 4 ATTCCGTGCC
执行命令后输出:
>seq 2 CATCTCGGGA >seq 4 ATTCCGTGCC
完美匹配你要的结果。
内容的提问来源于stack exchange,提问作者Honorato
相关产品推荐
相关产品推荐

