Linux下如何删除含'Query '模式的行及其直接上方的前一行
错误原因分析
- 引号语法错误:你写的
sed '/Query /'I, +1 d'存在多余的单引号,导致shell识别为未闭合的字符串,进入等待输入状态,所以终端只输出>提示符 - 输入流顺序错误:你把目标文件名放在了管道末尾的tac后面,前面的tac没有输入源,逻辑完全错误
可行解决方案
方案1:修正sed+tac实现
倒序文件后,匹配目标行时连带下一行(对应原文件的上一行)一起删除,再倒序恢复即可:
tac file.txt | sed '/Query /{N;d;}' | tac > newfile.txt
方案2:直接用awk单遍扫描实现
不需要两次倒序,效率更高,逻辑也更可控:
awk '/Query / { delete prev; next } { if (prev) print prev; prev = $0 } END { if (prev) print prev }' file.txt > newfile.txt
验证结果
执行命令后生成的 newfile.txt 内容就是你需要的输出:
1. Query= ENST00000641267.1 2. Query= ENST00000641448.1 3. Query= MSTRG.3294.1 4. Query= ENST00000435134.2 5. Query= ENST00000503142.1 13. Query= MSTRG.3309.1
内容的提问来源于stack exchange,提问作者Jasmin Jonson
相关产品推荐
相关产品推荐

