grep [반복]을 사용하여 사이에 문자 수에 관계없이 두 개의 연속 패턴을 검색합니다.

grep [반복]을 사용하여 사이에 문자 수에 관계없이 두 개의 연속 패턴을 검색합니다.

"..."는 다른 문자일 수 있는 "word1...word2"가 포함된 줄을 찾고 싶습니다. 지금까지 나는 다음과 같은 목적을 달성하기 위해 두 개의 grep을 사용했습니다.

grep "$word1" $filename | grep "$word2"

다음과 같이 가정하면 더 빠른 방법이 있습니까?

grep "$word1*$word2" $filename

여기서 *는 특수 문자일 수도 있고 다른 문자일 수도 있습니까?

답변1

사용 .*:

grep "${word1}.*${word2}" "$filename"
  • .임의의 문자와 일치
  • *앞의 문자 수와 일치합니다.

답변2

이 두 단어가 필요하다면분리된, 즉, 그렇게 한다면아니요abba일치시키려는 단어 중 하나가 있으면 bb다음을 사용하십시오.

grep "\\<$word1\\>.*\\<$word2\\>" "$filename"

이 패턴 \<(여기서는 \\<셸의 첫 번째 백슬래시를 이스케이프하기 위해 사용)은 단어 앞부분만 일치하고 \>유사하게 작동하지만 단어 뒤에서만 일치합니다.

\b전후에 일치하는 alo가 있으며 및 와 동일하게 [[:<:]]작동합니다 . 구현자는 다양합니다.[[:>:]]\<\>grep

관련 정보