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를 더 직접 지정할 수 있기 때문에 perl
as를 사용 하는 것이 다소 간단 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)