![grep [duplicate]를 사용하여 패턴 아래에서 항상 한 줄 ID와 정확히 일치하는 항목을 찾습니다.](https://linux55.com/image/114817/grep%20%5Bduplicate%5D%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%A8%ED%84%B4%20%EC%95%84%EB%9E%98%EC%97%90%EC%84%9C%20%ED%95%AD%EC%83%81%20%ED%95%9C%20%EC%A4%84%20ID%EC%99%80%20%EC%A0%95%ED%99%95%ED%9E%88%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EC%B0%BE%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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