일치하는 검색어가 있는 텍스트 블록 제거 [중복]

일치하는 검색어가 있는 텍스트 블록 제거 [중복]

검색어가 발견된 텍스트 블록(텍스타일)을 삭제하는 bash 스크립트를 작성하려고 합니다. 불행히도 나는 그것을 작동시킬 수 없습니다.

다음과 같은 목록 파일이 있습니다.

[valid_account]
user        = doe.john
passw       = 4567
mac         = 11-22-33-44-bb-cc
s2          = qwe

[valid_account]
user        = kent.clark
passw       = 1234
mac         = 00-11-22-33-aa-bb
s1          = abc
s2          = efg

[valid_account]
user        = bond.james
passw       = 6789
mac         = 44-55-66-77-ee-ff
s4          = bnm

[valid_account]
user        = parker.peter
passw       = 9876
mac         = 77-bb-cc-66-00-aa
s1          = abc

검색어가 00-11-22-33-aa-bb인 경우 해당 검색어로 이어지는 텍스트 블록을 어떻게 제거할 수 있나요?

[valid_account]
user        = doe.john
passw       = 4567
mac         = 11-22-33-44-bb-cc
s2          = qwe

[valid_account]
user        = bond.james
passw       = 6789
mac         = 44-55-66-77-ee-ff
s4          = bnm

[valid_account]
user        = parker.peter
passw       = 9876
mac         = 77-bb-cc-66-00-aa
s1          = abc

답변1

GNU sed 사용

sed '/valid_account/!d;:A;N;$bB;/\n$/!bA;:B;/00-11-22-33-aa-bb/d' infile

답변2

awk -v delete_regex='00-11-22-33-aa-bb' -v RS=$'\n\n' -v ORS=$'\n\n' \
    '$0 !~ delete_regex' inputfile

검색 문자열이 정규식으로 해석되지 않도록 이를 변경할 수 있습니다.

답변3

그리고, 간결하고 간결한 방법:

$ perl -00ne 'print if !/00-11-22-33-aa-bb/' file

또는 변수를 사용하십시오 str.

str='00-11-22-33-aa-bb' perl -00lne 'print if !/$ENV{"str"}/' file

산출:

[valid_account]
user        = doe.john
passw       = 4567
mac         = 11-22-33-44-bb-cc
s2          = qwe

[valid_account]
user        = bond.james
passw       = 6789
mac         = 44-55-66-77-ee-ff
s4          = bnm

[valid_account]
user        = parker.peter
passw       = 9876
mac         = 77-bb-cc-66-00-aa
s1          = abc

관련 정보