다음과 같이 파일을 편집해야 합니다.
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
auto wlx000
목표는 'iface...inet6'으로 시작하는 줄을 삭제하고 공백으로 시작하는 다음 몇 줄을 삭제하는 것입니다(없음 이상일 수 있음).
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
다음 결과를 얻으려면 나머지를 변경하지 않고 그대로 두십시오.
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000
나는 다음과 같이 sed를 사용해 보았습니다.
sed -i.old -r -e "/iface\s*\w*\s*inet6.*/,\${d;/^\s.*/d;}" /etc/configfile
그러나 올바른 위치부터 시작하여 끝까지 지워지는 모든 것을 삭제합니다. iface 텍스트를 선택한 후에 공백으로 시작하는 줄만 삭제하고 싶습니다.
답변1
모노라이너 를 다음과 같이 조정해 보세요 sed
.
sed '/iface\s*\w*\s*inet6.*/,/^[^ ]/ {/^[^ i]/!d}' file
첫 번째 패턴부터 공백 문자로 시작하지 않는 첫 번째 줄까지의 범위를 일치시키고 iface
공백 또는 "i"(선행)로 시작하는 줄을 제거합니다. i
추후 블록이 필요한지 재검토가 필요합니다 .
다음과 같이 작동하는 것 같습니다.
sed -n '/iface\s*\w*\s*inet6.*/ {:L; n; /^[ ]/bL;}; p' file
시도해보고 다시 보고해 주세요.
답변2
표준 스크립트는 sed
명시적인 루프를 사용하여 행을 삭제합니다.
/^iface .* inet6/ {
:again
N
s/.*\n//
/^[[:blank:]]/b again
}
스크립트는 이러한 inet6
줄을 찾은 다음 패턴 공간 내부의 해당 줄에 다음 줄을 추가합니다(사이에 새 줄이 포함됨). 그런 다음 첫 번째 개행 문자까지 포함하여 패턴 공간을 제거합니다(이렇게 하면 원래 inet6
행이 제거됩니다). 패턴 공간이 공백 문자(공백 또는 탭)로 시작하지 않을 때까지 이 작업을 계속합니다.
시험:
$ cat file
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
iface wlx000 inet6 auto
post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
auto wlx000
$ sed -f script.sed <file
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000
수동 데이터 테스트:
$ cat file
something1
something2
iface have a inet6 here
delete me
me too
same here
something3
something4
iface more something inet6
be gone
skip this
something5
$ sed -f script.sed <file
something1
something2
something3
something4
something5
스크립트는 "한 줄"입니다.
sed -e '/^iface .* inet6/ {' -e ':a' -e 'N;s/.*\n//;/^[[:blank:]]/ba' -e '}'
답변3
이미 도구에 대한 좋은 답변을 얻었 sed
지만 다음을 사용하여 더 쉽다고 생각되는 다른 것을 제안하겠습니다 pcregrep
.
pcregrep -Mv '^iface.*inet6(.|\n )*' file
정규식은 설명이 필요하지 않습니다. 해당 줄에서 시작하는 패턴을 검색한 ^iface.*inet6
다음 문자 그룹 또는 0회 이상 반복되는 단일 공백이 뒤따르는 새 줄을 검색합니다. 그런 다음 옵션을 사용하여 다중 선형 일치가 pcregrep
허용됨 을 표시하고 전체를 반전하면 됩니다 (일치된 부분은 제거됨).-M
-v