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