pdb 파일에서 패턴 일치 전후의 모든 것을 제거하는 방법은 무엇입니까?

pdb 파일에서 패턴 일치 전후의 모든 것을 제거하는 방법은 무엇입니까?

test.pdb저는 bash 스크립팅의 초보자인데 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

따라서 옵션을 사용하여 기본 출력을 억제한 -n다음 다음부터 다음까지 모든 것을 p인쇄합니다 (다음을 포함하는 것이 아니라 원하는 것 같습니다 . 주소 범위가 탐욕스럽지 않으므로 그렇게 할 수 있습니다).REMARK time *20.00ENDMDLREMARK time

REMARK이는 줄에서 공백 대신 탭을 사용하는 경우 작동합니다. 마지막으로 로 이스케이프 /REMARK time[[:space:]]*20\.00/해야 합니다. 그렇지 않으면 모든 문자와 일치합니다..\..

답변2

빌립보가 그것을 너희에게 주었느니라훌륭한 sed 답변, 그러나 여기에는 다른 접근 방식이 있습니다. 및 를 사용하여 입력 및 출력 레코드 구분 변수( 및 awk각각 , 이는 일반적으로 "줄"을 정의하는 문자와 각 호출에 추가되는 문자임)를 설정할 수 있습니다 . 이렇게 하면 각 줄 사이의 전체 줄 블록이 단일 "줄"로 처리되므로 찾고 있는 패턴이 포함된 줄을 인쇄하도록 알 수 있습니다 .RSORS\nprintENDMDLENDMDLawk

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 

관련 정보