특정 문자열 패턴이 포함 된 모든 파일을 찾아야했습니다. 염두에 두어야 할 첫 번째 해결책은 xargs grep으로 find piped를 사용하는 것입니다 .
find . -iname '*.py' | xargs grep -e 'YOUR_PATTERN'
그러나 두 줄 이상에 걸쳐있는 패턴을 찾아야한다면 바닐라 그렙이 여러 줄 패턴을 찾을 수 없기 때문에 붙어 있습니다.
특정 문자열 패턴이 포함 된 모든 파일을 찾아야했습니다. 염두에 두어야 할 첫 번째 해결책은 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 '등이 될 수 있습니다.
pcregrep
Mac에서 다음과 같이 사용할 수 있습니다brew install pcre
-H
일치하기 전에 파일 이름을 인쇄하는을 사용 하십시오 pcregrep -HM
.
awk
대부분의 * nix 시스템과 함께 제공 되는 이해 및 사용이 훨씬 쉽습니다 .
awk '/Start pattern/,/End pattern/ {printf NR " "; print}' filename
. 줄 번호에 고정 너비를 지정하여 더 예쁘게 만들 수 있습니다 awk '/Start pattern/,/End pattern/ {printf "%-4s ", NR; print}' filename
.
다음은 GNUgrep
를 사용하는 예입니다 .
grep -Pzo '_name.*\n.*_description'
-z
/--null-data
라인의 순서로 처리를 입력 및 출력 데이터.
여기도 참조
-z
하지 않고 여러 줄 검색에 grep을 사용할 수 없었기 때문에 한 줄로 검색을 분할하지 않고 -o
일치하는 부분 만 인쇄했습니다.
grep -rzl pattern *
-rzo가 작동하지 않았습니다)
brew reinstall --with-pcre git
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
(?s)
정규식에 다음과 같이 추가하면 개행 문자와 일치하도록 점 와일드 카드를 설득 할 수 있습니다 ."(?s)<html>.*</html>"
$
(패턴의 끝에서) 그것이 줄의 끝임 을 나타 내기 위해 점검 할 수 있습니다. 그러나 여러 줄 패턴을 찾는 데 도움이되는 것은 아닙니다. 도 참조하십시오 glob(7)
. : 당신은 또한 관심의이 웹 사이트를 찾을 수 regular-expressions.info
이 답변은 유용 할 수 있습니다.
재귀 적으로 찾기 위해 플래그 -R (재귀) 및 --include (GLOB 패턴)를 사용할 수 있습니다. 보다:
사용 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)를 실행하십시오.