grep: 모두 검색하지만 검색하지 않는 정규 표현식

grep: 모두 검색하지만 검색하지 않는 정규 표현식

몇개인지 궁금해요서지사전지난 수십 년 동안 내가 수집한 항목입니다. 그래서 저는 스스로에게 말했습니다. "이것을 위한 간단한 스크립트를 작성해보자!"

@bookBibTeX에 익숙하지 않은 분들을 위해: 각 항목은 등과 같은 유형 식별자로 시작합니다 . 실제로 50개 이상의 서로 다른 유형 식별자가 정의되어 있지만 이것이 향후 확장될 가능성이 있습니까? 일반적으로(반드시 그런 것은 아님) 식별자는 줄의 시작 부분에 배치됩니다. 따라서 내 정규식 번호 1에는 일치하는 항목의 시작 줄이 포함되어야 합니다.@article@incollection[[:space:]]*@\w+

불행히도 세 가지 식별자가 있습니다.아니요참고문헌 소스 시작: @comment, @string@preamble. 나는 가끔 내 파일에서 이들 중 일부를 사용합니다. 이를 일치시키려면 @((comment)|(string)|(preamble))잘 작동하고 잘 일치하는 정규식 2번을 작성해야 합니다 .

그러나 마지막 세 표현식은 참고문헌 항목으로 간주되어서는 안 되므로 최종 정규식은 "1번에 대한 모든 정규식을 찾고 2번은 찾지 않음"이어야 합니다.

여기서 두 정규식 그룹을 결합하지 못했습니다. 나는 두 개의 정규식을 파이핑하여 이 문제를 해결했습니다. 두 번째 정규식은 스위치를 사용하여 -v결과를 반전시켰지만 하나의 정규식에 이를 작성하는 방법이 있을 것이라고 확신합니다.

답변1

당신은 그것을 사용할 수 있습니다부정적인 예측일치하지 않는 @경우 comment또는 (또는 이러한 문자열로 시작하는 모든 항목) stringpreamble다음과 같습니다.

grep -P '^[[:space:]]*@(?!comment|string|preamble)\w' file

관련 정보