如何使用 sed 更改匹配行的最后一个字符

如何使用 sed 更改匹配行的最后一个字符

如何使用 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>/' -> thes` 表示将模式替换为替换网络
  • [ \t]+ -> 空格或 Tab 键出现一次或多次。
  • [0-9.]+-> 数字 0 至 9 和点出现一次或多次(用于 ip)
  • (PATTERN) \1-> 里面的模式()存储为组 1 \1,因此将用于替换(在本例中为空格或制表符 + “网关” + 空格或制表符)
  • 150.0.3.254 -> 是所需的网关

此致

相关内容