여러 검색 문자열을 사용하여 sed 줄 삭제

여러 검색 문자열을 사용하여 sed 줄 삭제

텍스트 파일이 있는데 test1.txt개와 날짜가 포함된 줄을 삭제해야 한다고 가정해 보겠습니다."29-APR-2015"

이를 수행하려면 다음 명령을 사용하십시오. 그러나 행이 삭제되지는 않습니다.

/DOG/d내가 언급한 것은 단지 include 를 제거하는 것과 같습니다 DOG.

명령 파일(sedcommands)

/DOG,29-APR-2015/d

테스트1.txt

DOG          29-APR-2015          
DOG          29-APR-2015          
DOG          30-APR-2015          
CAT          29-APR-2015          
CAT          29-APR-2015          

주문하다

sed -f sedcommands test1.txt > test2.txt

답변1

GNU sed 사용:

sed '/DOG/{/29-APR-2015/d}' test1

이 방법을 사용하면 모든 주문이 가능합니다. 즉. DOG이 날짜 이전 또는 이후일 수 있습니다.

답변2

POSIX적으로:

sed -e '/DOG/!b' -e '/29-APR-2015/!b' -e d file

b태그를 제공하지 않으시면 끝까지 목장을 해주시기 바랍니다.

또는:

sed '/DOG/{/29-APR-2015/d
}' file

최신 구현은 POSIX에서 허용하지만 필수는 아닌 확장인 양식 sed도 지원합니다 .{command;}

sed '/DOG/{/29-APR-2015/d;}' file

답변3

/DOG,29-APR-2015/dDOG와 사이에 쉼표가 없기 때문에 작동하지 않습니다 9-APR-2015. 이 시도;

$ sed -e '/DOG[[:space:]]*29-APR-2015/d' test1.txt 
     DOG          30-APR-2015          
     CAT          29-APR-2015          
     CAT          29-APR-2015   

[[:space:]]*DOG및 사이에는 0개 이상의 공백 문자가 허용됩니다 9-APR-2015. 문자 클래스는 [:space:]일반 공백과 탭을 허용하며 유니코드 글꼴과 함께 사용해도 안전합니다.

답변4

명령 파일에는 다음이 포함되어야 합니다.

/DOG *29-APR-2015/d

즉, 그 DOG뒤에는 0개 이상의 공백이 오고 그 뒤에는 지정된 날짜가 옵니다.

관련 정보