如何 grep 特定行并仅打印与字符匹配的行

如何 grep 特定行并仅打印与字符匹配的行

我有多个 pdb 文件,并且我只想 grep 以 开头的那些行^FORMUL,如果行C后跟的数字大于(C3、C4、C5、C6 等),那么我不应该打印它。

我用这个来提取以 开头的行,FORMUL但不知道如何搜索每一行并将其与 C 和 3> 匹配。

grep ^FORMUL *pdb(可能这里必须放置某种截止点,如果在每行内发现 C3> 则不要打印它)。

3OC2.pdb:FORMUL   3  HOH   *207(H2 O)    (print it)                                     
3OC7.pdb:FORMUL   2  SF4    FE4 S4       (print it)                                                
3OC8.pdb:FORMUL   3  NIC    C5 H7 N O7   (don't print, there is C5)                                               
3OC9.pdb:FORMUL   4  HOH   *321(H2 O)    (print it)                                                
3OC10.pdb:FORMUL   3  HEM    2(C34 H32 FE N4 O4)  (don't print, there is C34)

答案1

使用两个 grep:

grep '^FORMUL' *pdb | grep -vE 'C([3-9]|[12][0-9])'

第一个列出匹配的行^FORMUL,第二个删除(-v反转匹配)那些匹配C后跟 3 到 9 之间的数字,或者以 1 或 2 开头的两位数字的行(因此大于 3 的每个数字都将被删除)。

答案2

我认为这应该可行:

awk '/^FORMUL/ && !match($4, /C[3-9]?[0-9]/) {print;}' *.pdb 

?:有我们可以尝试的在线数据源吗?

参考(第 154 页):ftp://ftp.wwpdb.org/pub/pdb/doc/format_descriptions/Format_v33_A4.pdf

相关内容