sed를 사용하여 PAT1은 포함하지만 PAT2는 포함하지 않는 라인을 추출합니다.

sed를 사용하여 PAT1은 포함하지만 PAT2는 포함하지 않는 라인을 추출합니다.

PAT1은 포함하지만 PAT2는 포함하지 않는 파일에서 행을 추출하고 싶습니다. 예를 들어 PAT1='dog', PAT2='cat' 및 다음 입력은 다음과 같습니다.

1 cat chicken
2 bird dog apple
3 dog orange cat
4 cat juice coffee
5 cow milk dog

나는 다음과 같은 출력을 원합니다.

2 bird dog apple
5 cow milk dog

답변1

그것은 다음과 같습니다:

sed '/dog/!d;/cat/d'

당신은 또한 볼 수 있습니다

grep dog | grep -v cat

답변2

다음을 수행할 수 있습니다.

sed -n '
    /dog/{
        /cat/!{
            p
        }
    }
' file.txt

또는:

awk '/dog/ && !/cat/' file.txt

후자는 매우 명확하고 기억하기 쉽다는 장점이 있습니다.

또는 사용

perl -ne 'print if /dog/ && !/cat/' file.txt

관련 정보