검색어가 발견된 텍스트 블록(텍스타일)을 삭제하는 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