sed는 파일에서 줄을 찾아 문자를 제거합니다.

sed는 파일에서 줄을 찾아 문자를 제거합니다.

다음과 같은 줄이 포함된 파일이 있습니다.

proto udp
.
.
.
..
server 10.10.8.0/24 255.255.255.0

이 라인 서버 10.10.8.0/24 255.255.255.0에서 /24만 제거하는 방법이 필요합니다.

server 10.10.8.0 255.255.255.0

이 줄은 변경 가능하지만 유일한 상수는 / 다음과 같을 수 있다는 점을 고려하면

server 198.196.178.0/8 255.0.0.0

그래서 이렇게 되도록 하려면 이 줄에서만 /8을 제거하는 방법이 필요합니다.

server 198.196.178.0 255.0.0.0

답변1

sed캡처된 그룹과 함께 GNU를 사용하십시오.

sed -r 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' file.txt

파일을 그 자리에서 편집하려면 -i다음 옵션을 사용하세요.

sed -ri 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' file.txt

예:

% sed -r 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' <<<'server 10.10.8.0/24 255.255.255.0'
server 10.10.8.0 255.255.255.0

% sed -r 's_^(server\s+([^.]+.){3}[0-9]{1,3})/[0-9]+(.*)_\1\3_' <<<'server 198.196.178.0/8 255.0.0.0' 
server 198.196.178.0 255.0.0.0

관련 정보