所以,我有30000个文件,其中包含一些应删除的额外行。
ATOM 2208 O LYS 168 12.304 -23.216 0.596 1.00 0.00
ATOM 2209 OXT LYS 168 13.852 -21.707 0.692 1.00 5.19
TER
ATOM 2210 N ASP 178 2.448 -25.410 -0.746 1.00 5.40
ATOM 2211 HT1 ASP 178 2.706 -25.926 0.119 1.00 0.00
..
TER
END
所以,我想只删除 TER 的行,但后跟一行以 ATOM 开头的新行。因此,如果 TER 后面跟着其他任何内容,我不想删除。
有没有办法用sed做到这一点:
我可以使用此命令,但它会删除 TER :
的所有行sed -i '/^TER/d' myfile
答案 0 :(得分:3)
我在学习这个答案时学到了很多关于sed的知识,这很酷。
sed -i '/^TER$/{N; s/^TER\nATOM/ATOM/}' test.txt
基本上它找到一条只包含“TER”的行。然后它将下一行附加到此行。如果这个新字符串以“TER”开头,后跟一个新行和“ATOM”,它只用“ATOM”替换它。
我建议不要进行内联编辑,除非你已经进行了备份以防万一。
希望这适合你。
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed '$!N;/^TER.*\nATOM/!P;D' file
仅打印不以TER
开头,后跟ATOM
的行。