development

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

big-blog 2020. 7. 25. 10:14
반응형

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


특정 문자열 패턴이 포함 된 모든 파일을 찾아야했습니다. 염두에 두어야 할 첫 번째 해결책은 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 파일에서 여러 값을 추출하는 방법을 참조하십시오.


이 답변은 유용 할 수 있습니다.

여러 줄 검색을위한 정규식 (grep)

재귀 적으로 찾기 위해 플래그 -R (재귀) 및 --include (GLOB 패턴)를 사용할 수 있습니다. 보다:

grep --exclude /-include 구문을 사용하여 특정 파일을 grep하지 마십시오.


perl -ne 'print if (/begin pattern/../end pattern/)' filename

@Marcin : awk 예제 비 욕심 :

awk '{if ($0 ~ /Start pattern/) {triggered=1;}if (triggered) {print; if ($0 ~ /End pattern/) { exit;}}}' filename

사용 ex/ vi편집기와 globstar 옵션 (유사 구문 awksed) :

ex +"/string1/,/string3/p" -R -scq! file.txt

aaa시작점이 어디 이며 bbb끝 텍스트입니다.

재귀 적으로 검색하려면 다음을 시도하십시오.

ex +"/aaa/,/bbb/p" -scq! **/*.py

참고 : **구문 을 사용하려면 shopt -s globstar(Bash 4 또는 zsh)를 실행하십시오.

참고 URL : https://stackoverflow.com/questions/152708/how-can-i-search-for-a-multiline-pattern-in-a-file

반응형