[linux] 파일에서 여러 줄 패턴을 어떻게 검색합니까?

특정 문자열 패턴이 포함 된 모든 파일을 찾아야했습니다. 염두에 두어야 할 첫 번째 해결책은 xargs grep으로 find piped를 사용하는 것입니다 .

find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'

그러나 두 줄 이상에 걸쳐있는 패턴을 찾아야한다면 바닐라 그렙이 여러 줄 패턴을 찾을 수 없기 때문에 붙어 있습니다.



답변

그래서 Perl Compatible Regular Expressions GREP의 약자 인 pcregrep 을 발견 했습니다 .

예를 들어, ‘ _name ‘변수 바로 뒤에 ‘ _description ‘변수 가있는 파일을 찾아야합니다 .

find . -iname '*.py' | xargs pcregrep -M '_name.*\n.*_description'

팁 : 패턴에 줄 바꿈 문자를 포함해야합니다. 플랫폼에 따라 ‘\ n’, \ r ‘,’\ r \ n ‘등이 될 수 있습니다.


답변

awk에 가지 않습니까 ?

awk '/Start pattern/,/End pattern/' filename


답변

다음은 GNUgrep 를 사용하는 예입니다 .

grep -Pzo '_name.*\n.*_description'

-z/--null-data 라인의 순서로 처리를 입력 및 출력 데이터.

여기도 참조


답변

grep -Plibpcre도 사용하지만 훨씬 더 광범위하게 설치됩니다. titlehtml 문서 의 전체 섹션 을 찾으려면 여러 줄에 걸쳐 있어도 다음을 사용할 수 있습니다.

grep -P '(?s)<title>.*</title>' example.html

이후 PCRE 프로젝트 펄 표준을 구현, 참조를 위해 펄 문서를 사용합니다 :


답변

더 유용한 예는 다음과 같습니다.

pcregrep -Mi "<title>(.*\n){0,5}</title>" afile.html

제목 줄은 최대 5 줄로 표시 되더라도 html 파일에서 제목 태그를 검색합니다.

무제한 라인의 예는 다음과 같습니다.

pcregrep -Mi "(?s)<title>.*</title>" example.html


답변

실버 수색자 :

ag 'abc.*(\n|.)*efg'

은색 검색기의 속도 최적화가 여기에서 빛날 수 있습니다.


답변

grep alternative sift를 사용할 수 있습니다 (면책 조항 : 저자입니다).

여러 줄 일치를 지원하고 검색을 특정 파일 형식으로 제한합니다.

sift -m-파일 '* .py' 'YOUR_PATTERN'

(지정된 여러 줄 정규식 패턴에 대한 모든 * .py 파일을 검색하십시오)

모든 주요 운영 체제에서 사용할 수 있습니다. 상기 살펴보세요 샘플 페이지 가 XML 파일에서 여러 값을 추출하는 방법을 참조하십시오.