如何使用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..... 

我怎样才能改变网关的主机八位字节? 我有很多机器来做这件事,每个人都在不同的networking,但网关的八位字节总是相同的。

如果你的网关是150.0.3.254你可以这样做:

 sed -i -E 's/([ \t]+gateway[ \t])+[0-9.]+/\1150.0.3.254/' /etc/network/interfaces 

让我解释它是如何工作的:

  • -i – >手段replace文件
  • -E – >使用扩展正则expression式,避免转义特殊字符(\(
  • 's/<PATTERN>/<REPLACEMENT>/' -> the s`表示将模式replace为replacemnet
  • [ \t]+ – >空格或制表符一次或多次出现。
  • [0-9.]+ – >从0到9的数字,点出现一次或多次(对于ip)
  • (PATTERN) \1 – >里面()的模式存储为组1 \1 ,所以它将用于replace(在这种情况下,空格或制表符+“网关”+空格或制表符)
  • 150.0.3.254 – >是所需的网关

最好的祝福