我有一个包含这样的行的文件
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
将 GNUsed
与捕获的组一起使用:
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