[regex] grep으로 한 줄에 두 줄을 일치시킵니다.

grep두 개의 다른 문자열이 포함 된 줄을 일치시키는 데 사용하려고합니다 . 나는 다음을 시도했지만 이것은 내가 원하는 것이 아닌 string1 또는 string2 를 포함하는 줄과 일치합니다 .

grep 'string1\|string2' filename

그렇다면 두 문자열을 모두grep 포함하는 줄 과 어떻게 일치 합니까?



답변

당신이 사용할 수있는 grep 'string1' filename | grep 'string2'

또는, grep 'string1.*string2\|string2.*string1' filename


답변

나는 이것이 당신이 찾고있는 것이라고 생각합니다.

grep -E "string1|string2" filename

나는 다음과 같이 대답한다고 생각합니다.

grep 'string1.*string2\|string2.*string1' filename

둘 중 하나만 존재하거나 둘 다 존재하지 않는 경우에만 일치합니다.


답변

모든 단어를 포함하는 파일을 임의의 순서로 검색하려면

grep -ril \'action\' | xargs grep -il \'model\' | xargs grep -il \'view_type\'

첫 번째 grep은 재귀 적 검색 ( r)을 시작하고 대소 문자 ( i)를 무시 하고 파일의 어느 곳에서든 l한 용어 ( 'action'작은 따옴표)와 일치하는 ( ) 파일 이름을 나열 (인쇄) 합니다.

후속 greps는 다른 용어를 검색하여 대소 문자를 구분하지 않고 일치하는 파일을 나열합니다.

최종 파일 목록은 파일의 임의의 위치에 상관없이 이러한 용어가 포함 된 파일입니다.


답변

당신이있는 경우 grep로모그래퍼 -P제한에 대한 옵션 perl정규식, 당신은 사용할 수 있습니다

grep -P '(?=.*string1)(?=.*string2)'

겹치는 문자열로 작업 할 수 있다는 이점이 있습니다. and를 더 직접 지정할 수 있기 때문에 perlas를 사용 하는 것이 다소 간단 grep합니다.

perl -ne 'print if /string1/ && /string2/'


답변

귀하의 방법은 거의 좋았으며 -w 만 누락되었습니다.

grep -w 'string1\|string2' filename


답변

|정규 표현식 의 연산자는 또는을 의미합니다. 즉, string1 또는 string2가 일치한다고합니다. 당신은 할 수 있습니다 :

grep 'string1' filename | grep 'string2'

첫 번째 명령의 결과를 두 번째 grep으로 파이프합니다. 그것은 둘 다 일치하는 줄만 줄 것입니다.


답변

다음과 같이 시도해보십시오.

(pattern1.*pattern2|pattern2.*pattern1)