문제

특정 문자열 패턴이 포함 된 모든 파일을 찾아야했습니다. 떠오르는 첫 번째 솔루션은 사용하는 것입니다 찾기 파이프 Xargs Grep:

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

그러나 한 줄 이상에 걸쳐있는 패턴을 찾아야한다면 바닐라 Grep이 멀티 린 패턴을 찾을 수 없기 때문에 갇혀 있습니다.

도움이 되었습니까?

해결책

그래서 나는 발견했다 PCREGREP 그것은 Perl 호환 정규식 GREP.

예를 들어, ''파일을 찾아야합니다._이름'변수는 즉석이 뒤 따릅니다.'_설명'변수 :

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

팁 : 패턴에 라인 브레이크 문자를 포함시켜야합니다. 플랫폼에 따라 ' n', r ',' r n ', ...

다른 팁

당신은 왜 가지 않습니까? 어색한:

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

다음은 사용하는 예입니다 암소 비슷한 일종의 영양 grep:

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

-z/--null-data 입력 및 출력 데이터를 라인 시퀀스로 처리하십시오.

또한보십시오 여기

grep -P 또한 libpcre를 사용하지만 IS 많이 더 널리 설치되었습니다. 완전한 것을 찾으려면 title HTML 문서의 섹션은 여러 줄에 걸쳐 있더라도 다음을 사용할 수 있습니다.

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

부터 PCRE 프로젝트 Perl 표준을 구현하고 참조를 위해 Perl 설명서를 사용하십시오.

다음은 더 유용한 예입니다.

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

최대 5 줄까지하더라도 HTML 파일의 제목 태그를 검색합니다.

다음은 무제한 라인의 예입니다.

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

와 함께 실버 검색 자:

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

Silver Searcher의 속도 최적화가 여기에서 빛날 수 있습니다.

Grep 대안을 사용할 수 있습니다 체로 치다 여기 (면책 조항 : 나는 저자입니다).

멀티 라인 매칭을 지원하고 검색을 특정 파일 유형으로 제한합니다.

sift -m --files '*.py' 'YOUR_PATTERN'

(지정된 멀티 린 레글 즈 패턴에 대한 모든 *.py 파일 검색)

모든 주요 운영 체제에 사용할 수 있습니다. 살펴보십시오 샘플 페이지 XML 파일에서 멀티 라인 값을 추출하는 데 어떻게 사용될 수 있는지 확인합니다.

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

멀티 라인 검색을위한 Regex (GREP)가 필요합니다

재귀 적으로 찾으려면 플래그 -r (재귀) 및 -include (글로벌 패턴)를 사용할 수 있습니다. 보다:

grep 사용 --exclude/-특정 파일을 통해 grep에 구문 포함

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

사용 ex/vi 편집자와 Globstar 옵션 (구문과 비슷합니다 awk 그리고 sed):

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

어디 aaa 당신의 출발점입니다 bbb 당신의 결말 텍스트입니다.

재귀 적으로 검색하려면 시도해보십시오.

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

참고 : 활성화 ** 구문, 실행 shopt -s globstar (bash 4 또는 zsh).

@marcin : awk 예제 비-그 리디 :

awk '{if ($0 ~ /Start pattern/) {triggered=1;}if (triggered) {print; if ($0 ~ /End pattern/) { exit;}}}' filename
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top