/ / grepを使用して、行の順序を変更せずに2つの文字列のいずれかを見つけますか? -正規表現、grep、タンパク質データベース

grepを使用して、行の順序を変更せずに2つの文字列のいずれかを検索しますか? - regex、grep、protein-database

私はこれが尋ねられたと確信していますが、それを見つけることができませんので、冗長性のために私の謝罪。

grepまたはegrepを使用して、「P」または「CA」のいずれかが含まれるすべての行を検索し、それらを新しいファイルにパイプします。私はどちらかを使って簡単にそれを行うことができます:

egrep " CA " all.pdb > CA.pdb

または

egrep " P " all.pdb > P.pdb

私は正規表現が初めてなので、構文がわからない or.

更新: 出力行の順序は重要です。つまり、一致した文字列で出力を並べ替えるのは望ましくありません。 1つのファイルの最初の8行の例を次に示します。

ATOM      1 N    THR U  27     -68.535  88.128 -17.857  1.00  0.00      1H5  N
ATOM      2 HT1  THR U  27     -69.437  88.216 -17.434  0.00  0.00      1H5  H
ATOM      3 HT2  THR U  27     -68.270  87.165 -17.902  0.00  0.00      1H5  H
ATOM      4 HT3  THR U  27     -68.551  88.520 -18.777  0.00  0.00      1H5  H
ATOM      5 CA   LYS B 122    -116.643  85.931-103.890  1.00  0.00      2H2B C
ATOM      6 P    THY J   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 P
ATOM      8 HB   THR U  27     -68.543  88.566 -15.171  0.00  0.00      1H5  H
ATOM      9 CA   LYS B 122    -116.643  85.931-103.890  1.00  0.00      2H2B C
ATOM     10 P    THY J   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 P
ATOM     11 HB   THR U  27     -68.543  88.566 -15.171  0.00  0.00      1H5  H
ATOM     12 C    SER D   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 C
ATOM     13 OP1  SER D   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 O

そして、この例の結果ファイルを次のようにします。

ATOM      5 CA   LYS B 122    -116.643  85.931-103.890  1.00  0.00      2H2B C
ATOM      6 P    THY J   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 P
ATOM      9 CA   LYS B 122    -116.643  85.931-103.890  1.00  0.00      2H2B C
ATOM     10 P    THY J   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 P

回答:

回答№1は5

あなたは使うことができます grep このような:

grep " P | CA " file > new_file

| 式は「または」を示します。私たちは伝えるためにそれをエスケープする必要があります grep 特別な意味があること。

このエスケープを回避し、拡張機能を備えたより洗練されたものを使用することができます grep

grep -E " (P|CA) " file > new_file

一般的に、私は awk 構文、より明確で拡張しやすいため:

awk "/ P / || / CA /" file

または、サンプル入力を使用して、使用できます awk これが発生したときに3列目にあるかどうかを確認するには:

$ awk "$3=="CA" || $3=="P"" file
ATOM      5 CA   LYS B 122    -116.643  85.931-103.890  1.00  0.00      2H2B C
ATOM      6 P    THY J   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 P
ATOM      9 CA   LYS B 122    -116.643  85.931-103.890  1.00  0.00      2H2B C
ATOM     10 P    THY J   2     -73.656  70.884  -7.805  1.00  0.00      DNA2 P

テスト

$ cat file
hello P is here and CA also
but CA appears
nothing here
P CA
$ grep " P | CA " file
hello P is here and CA also
but CA appears
$ grep -E " (P|CA) " file
hello P is here and CA also
but CA appears
$ awk "/ P / || / CA /" file
hello P is here and CA also
but CA appears

回答№2の場合は0

次のコマンドは、ディレクトリに存在するすべてのファイルを検索します /path_to_your_dir/ ログを出力します /tmp/grep.log

grep "P | CA" -Er / path_to_your_dir /> /tmp/grep.log

大文字と小文字を区別しない場合は、置き換えます -Er-Eri.
ファイル内 /tmp/grep.log ファイルへのパスと一致した文字列が表示されます。
特定の拡張子を持つファイルを検索する必要がある場合は、次のように記述します。

grep "P | CA" -Er --include = *。php / path_to_your_dir /> /tmp/grep.log

それがあなたを助けることを願っています。