grep [duplicate]를 사용하여 패턴 아래에서 항상 한 줄 ID와 정확히 일치하는 항목을 찾습니다.

grep [duplicate]를 사용하여 패턴 아래에서 항상 한 줄 ID와 정확히 일치하는 항목을 찾습니다.

grep두 개의 일치 항목을 차례로 확인하는 코드를 알고 싶습니다 . 예를 들어, 검색 파일 중 하나에서 다음 텍스트를 얻습니다.

@<TRIPOS>MOLECULE   ← pattern
1532                ← ID
17 17
SMALL
NO_CHARGES

난 찾아야 해ID와 정확히 일치하는 항목은 항상 패턴 아래 한 줄입니다.그런 다음 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

관련 정보