파일에서 여러 줄 패턴을 어떻게 검색합니까?
특정 문자열 패턴이 포함 된 모든 파일을 찾아야했습니다. 염두에 두어야 할 첫 번째 해결책은 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 '/Start pattern/,/End pattern/' filename
다음은 GNUgrep
를 사용하는 예입니다 .
grep -Pzo '_name.*\n.*_description'
-z
/--null-data
라인의 순서로 처리를 입력 및 출력 데이터.
여기도 참조
grep -P
libpcre도 사용하지만 훨씬 더 광범위하게 설치됩니다. title
html 문서 의 전체 섹션 을 찾으려면 여러 줄에 걸쳐 있어도 다음을 사용할 수 있습니다.
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 파일에서 여러 값을 추출하는 방법을 참조하십시오.
이 답변은 유용 할 수 있습니다.
재귀 적으로 찾기 위해 플래그 -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 옵션 (유사 구문 awk
과 sed
) :
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
'development' 카테고리의 다른 글
루비에서 버전을 비교하는 방법? (0) | 2020.07.25 |
---|---|
Django 모델에 전화 번호를 저장하는 가장 좋은 방법은 무엇입니까 (0) | 2020.07.25 |
Android에서 객체를 JSON으로 변환 (0) | 2020.07.25 |
Moment.js로 현재 타임 스탬프를 반환하는 방법은 무엇입니까? (0) | 2020.07.25 |
HTML : 파일 업로드를 이미지만으로 제한하는 방법? (0) | 2020.07.25 |