grep
2つの一致を順番に確認するコードを知りたいです。たとえば、検索ファイルのいずれかから次のテキストを取得します。
@<TRIPOS>MOLECULE ← pattern
1532 ← ID
17 17
SMALL
NO_CHARGES
私は見つける必要がありますIDと正確に一致する項目は常にパターンの下の1行です。次に、IDを含むファイル名を検索します。
次のコマンドを使用しました。
grep -Pzo '@<TRIPOS>MOLECULE'(?:.*\n)*?\K1532' filename
しかし、1532と153284を含むファイルを取得しました。コードと正確に一致するIDが必要です。
答え1
あなたのパターンが探していますが、1532
後に何が起こるのかは言いません。
$ printf '1532\n15321\n1532foo\n' | grep -o '1532'
1532
1532
1532
実行する操作に応じて、改行前にのみ一致するようにパターンを制限できます。
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\n' filename
または、行末の前の数字の後にスペースがある場合:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\s*\n' filename
または、同じ行に異なる内容がある可能性がある場合は、次のようにして\b
単語の境界の前に数字が表示されていることを確認してください。
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\b' filename