如何使用 sed 更改匹配行的最后一个字符?
例如:/etc/network/interfaces
auto eth0
iface eth0 inet static
address 150.0.3.50
netmask 255.255.255.0
network 150.0.3.0
gateway 150.0.3.6
auto eth.....
我怎样才能只更改网关的主机八位字节?我有很多机器可以做到这一点,每台机器都在不同的网络中,但网关的八位字节始终相同。
答案1
如果您的网关是150.0.3.254
您可以这样做:
sed -i -E 's/([ \t]+gateway[ \t])+[0-9.]+/\1150.0.3.254/' /etc/network/interfaces
让我解释一下它是如何工作的:
-i
-> 表示替换文件-E
-> 使用扩展正则表达式,避免转义特殊字符,(
例如\(
's/<PATTERN>/<REPLACEMENT>/' -> the
s` 表示将模式替换为替换网络[ \t]+
-> 空格或 Tab 键出现一次或多次。[0-9.]+
-> 数字 0 至 9 和点出现一次或多次(用于 ip)(PATTERN) \1
-> 里面的模式()
存储为组 1\1
,因此将用于替换(在本例中为空格或制表符 + “网关” + 空格或制表符)150.0.3.254
-> 是所需的网关
此致