2 개의 다른 라인에 grep을 사용하는 방법


15

단일 grep명령 을 사용하여 두 개의 다른 줄에있을 때 두 개의 다른 구를 검색하려면 어떻게 해야합니까?

예를 들어

1 행 : 이것은 달콤합니다.

2 행 : 레몬.

나는 이것을 사용했지만 결과는 없다

grep "sweet.*lemon" file_type

답변:


20

grep서로 다른 두 줄에 사용하려면 두 패턴을 모두 검색하십시오.

$ grep -e sweet -e lemon file_type
This is a sweet
lemon.

또는 교대 사용

$ grep -E 'sweet|lemon' file_type
This is a sweet
lemon.

패턴 다음 줄을 얻으려면 컨텍스트 옵션을 사용할 수 있습니다

$ grep -A1 sweet file_type
This is a sweet
lemon.

그러나 당신이 여러 패턴, 명시 적으로 검색하는 경우 까다로운 때문에이기 grep라인에서 생각 ... . 당신 .*줄에 "달콤한"과 "레몬"사이의 모든 것을 잡을 것 입니다. 다음 줄 에서 줄 바꿈 을 -P사용하여 "레몬"을 얻을 수 있으며 파일을 null로 구분하여 다음 과 같이 할 수 있습니다 .\ngrep-z

$ grep -zPo 'This is a sweet\nlemon' file_type
This is a sweet
lemon.

노트:

  • -E확장 정규식을 사용하십시오 ( |이탈 할 필요없이 대체 문자 를 사용 하기 위해)
  • -An 패턴 뒤에 추가 행을 인쇄하십시오. 여기서 n은 인쇄 할 후행 행 수입니다.
  • -P사용 펄 스타일의 정규 표현식 (에 "실험" grep- 설치 pcregrep더 나은 펄 정규식 지원 대신)
  • -znull 문자를 구분자로 사용하십시오 (이 경우에는 척하지만 grep단어를 사용합니다)
  • -o 일치하는 부분 만 인쇄

grep -zP이 특정 경우 (정확하게 두 줄로 구성된 파일)에서 명령이 작동 하지만 일반적으로 줄 바꿈으로 구분 된 일반 파일을 한 줄로 간주하므로 전체 파일 내용을 덤프하십시오 (어딘가에 일치하는 경우) 혹은 아무것도 아닌; 보통 사람들이 사용하는 것이 아닙니다 grep.
Marc van Leeuwen

네 이것은 단지 -o편집 에만 유용합니다 ...
Zanna

이 다른 배포판에 시도되는 경우에, 당신은 발생할 수 있습니다 grep: The -P and -z options cannot be combined- 예를 들어, 그렙 (GNU 그렙) RHEL에 2.5.1
제이슨 Pyeron

6

이처럼 :

grep "sweet\|lemon"

| "레몬 달콤한"죄송하지만이 정확히 일치합니다
αғsнιη

4
@KasiyA이 라인은 잘 작동합니다. grep"특수 문자"와 같은 "표준 모드"의 기본 작동에 의해 |, +, *문자 그대로 해석 하지 않는 한 그들은 백 슬래시로 마스크하고 있습니다. 예를 들어이 답변을 참조하십시오 . 익숙한 방식을 사용하려면 문자 그대로 해석하려면 "특수 문자"를 마스킹해야합니다. "확장 모드"( grep -E) 로 전환해야합니다 . 어쩌면 madneon 예를 들어 어떤 작전을 시도하는 것은, 그의 대답에 좀 더 정교한 수있는 것입니다 일치했다?
Henning Kockerbeck 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.