如何从 pdb 文件中删除匹配模式之前和之后的所有内容?

如何从 pdb 文件中删除匹配模式之前和之后的所有内容?

我是 bash 脚本的初学者,但我尝试删除 pdb 文件 ( test.pdb) 中该文件之前REMARK time 20.00和之后的所有内容REMARK time 30.00。我正在使用这个sed命令,例如:

sed 's/^.*\(REMARK time 20.00.*REMARK time 30.00\).*$/\1/' test.pdb > end.pdb

不幸的是,上面的命令生成 end.pdb 文件,该文件完全是空的。你能帮我解决这个问题吗?

我的test.pdb文件如下:

REMARK time   10.00                                       ENERGY     1.95686E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
........
ENDMDL
REMARK time   20.00                                       ENERGY     1.96641E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
SHEET    2 B*  2 TRP   270  ASP   273 -1  N  ASP   273   O  ALA   179
SHEET    1 B*  2 LEU   194  GLY   196  0
SHEET    2 B*  2 MET   211  PHE   213 -1  N  PHE   213   O  LEU   194
SHEET    1 B*  2 ASN   205  ASN   215  0
SHEET    2 B*  2 ASP   218  LEU   228 -1  N  LEU   228   O  ASN   205
SHEET    1 B*  2 TRP   224  ASP   229  0
....................
ENDMDL
REMARK time  100.00                                       ENERGY     1.95395E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
.......

CONECT   1131   1133   1132
CONECT   1133   1135   1134
CONECT   1135   1137   1136
CONECT   1137   1139   1138
CONECT   1139   1141   1140
CONECT   1141   1143   1142
CONECT   1143   1145   1144
CONECT   1145   1146
ENDMDL

最后我只想提取REMARK time 20.00以下信息:

REMARK time   20.00                                       ENERGY     1.96641E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
SHEET    2 B*  2 TRP   270  ASP   273 -1  N  ASP   273   O  ALA   179
SHEET    1 B*  2 LEU   194  GLY   196  0
SHEET    2 B*  2 MET   211  PHE   213 -1  N  PHE   213   O  LEU   194
SHEET    1 B*  2 ASN   205  ASN   215  0
SHEET    2 B*  2 ASP   218  LEU   228 -1  N  LEU   228   O  ASN   205
SHEET    1 B*  2 TRP   224  ASP   229  0
SHEET    2 B*  2 LYS   232  LEU   237 -1  N  LEU   237   O  TRP   224
......
CONECT   1141   1143   1142
CONECT   1143   1145   1144
CONECT   1145   1146
ENDMDL

答案1

您使用的命令用于在行内进行编辑。要提取一系列行,您可以使用范围寻址/start_pattern/,/end pattern/

sed -n '/REMARK time *20\.00/,/ENDMDL/p' test.pdb

因此,您使用 option 抑制默认输出-n,然后p打印从REMARK time *20.00下一个到下一个的所有内容ENDMDL(这似乎是您想要的,而不是包括下一个REMARK time- 地址范围不是贪婪的,所以您可以这样做)。

如果您的REMARK行使用制表符而不是空格,则可以使用/REMARK time[[:space:]]*20\.00/.最后,您需要对.with进行转义\.,否则.会匹配任何字符。

答案2

Philippos 已经给你了很好的 sed 答案,但这里有一种不同的方法。您可以使用awk和设置输入和输出记录分隔符变量(分别为RSORS;这通常是一个\n字符,它定义“行”,以及附加到每个print调用的内容)到ENDMDL。这样,每行之间的整个行块ENDMDL将被视为单个“行”,因此您可以告诉awk打印包含您正在查找的模式的任何行:

awk 'BEGIN{ RS=ORS="ENDMDL\n"}/REMARK\s*time\s*20\.00/' foo.pdb 

在您的文件上运行它会给出:

$ awk 'BEGIN{ RS=ORS="ENDMDL\n"}/REMARK\s*time\s*20\.00/' foo.pdb 
REMARK time   20.00                                       ENERGY     1.96641E+03
HELIX    1 H1  GLU    131  SER    146  1                                      15
HELIX    2 H2  GLU    278  SER    293  1                                      15
HELIX    3 H3  GLU    426  SER    441  1                                      15
HELIX    4 H4  GLU    574  SER    589  1                                      15
SHEET    1 B1  2 ALA    32  VAL    34  0
SHEET    2 B1  2 LYS    48  GLU    50 -1  N  GLU    50   O  ALA    32
SHEET    1 B2  2 ALA    32  LEU    35  0
SHEET    2 B2  2 TRP   123  ASP   126 -1  N  ASP   126   O  ALA    32
SHEET    1 B3  2 LEU    47  PRO    51  0
SHEET    2 B3  2 VAL    62  PHE    66 -1  N  PHE    66   O  LEU    47
SHEET    1 B4  2 ASN    58  ASN    68  0
SHEET    2 B4  2 ASP    71  LEU    81 -1  N  LEU    81   O  ASN    58
SHEET    1 B5  2 TRP    77  ASP    82  0
SHEET    2 B5  2 LYS    85  LEU    90 -1  N  LEU    90   O  TRP    77
SHEET    1 B6  2 ALA    84  LEU    90  0
SHEET    2 B6  2 LEU    93  VAL    99 -1  N  VAL    99   O  ALA    84
SHEET    1 B7  2 ASN    96  VAL    99  0
SHEET    2 B7  2 ASP   111  GLU   114 -1  N  GLU   114   O  ASN    96
SHEET    1 B8  2 HIS   107  VAL   113  0
SHEET    2 B8  2 ASP   119  LEU   125 -1  N  LEU   125   O  HIS   107
SHEET    1 B9  2 ALA   179  VAL   181  0
SHEET    2 B9  2 LYS   195  GLU   197 -1  N  GLU   197   O  ALA   179
SHEET    1 B*  2 ALA   179  LEU   182  0
SHEET    2 B*  2 TRP   270  ASP   273 -1  N  ASP   273   O  ALA   179
SHEET    1 B*  2 LEU   194  GLY   196  0
SHEET    2 B*  2 MET   211  PHE   213 -1  N  PHE   213   O  LEU   194
SHEET    1 B*  2 ASN   205  ASN   215  0
SHEET    2 B*  2 ASP   218  LEU   228 -1  N  LEU   228   O  ASN   205
SHEET    1 B*  2 TRP   224  ASP   229  0
....................
ENDMDL

请注意,某些 awk 版本可能不喜欢\s,因此您可以尝试这样做:

awk 'BEGIN{ RS=ORS="ENDMDL\n"} $1=="REMARK" && $2=="time" && $3=="20.00"' foo.pdb 

相关内容