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

将 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

相关内容