grep [duplicate] を使用して、パターンの下で常に 1 行の ID と正確に一致する項目を探します。

grep [duplicate] を使用して、パターンの下で常に 1 行の ID と正確に一致する項目を探します。

grep2つの一致を順番に確認するコードを知りたいです。たとえば、検索ファイルのいずれかから次のテキストを取得します。

@<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

おすすめ記事