Sed

如何使用 sed 更改匹配行的最後一個字元

  • June 11, 2015

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

如何僅更改網關的主機八位字節?我有很多機器可以做到這一點,每台機器都在不同的網路中,但網關的八位字節總是相同的。

如果您的網關是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` 表示將模式替換為 replacemnet
  • [ \t]+ -> Space 或 Tab 出現一次或多次。
  • [0-9.]+-> 從 0 到 9 的數字並點一個或多個出現(對於 ip)
  • (PATTERN) \1-> 裡面的模式()儲存為組 1 \1,因此它將用於替換(在這種情況下,空格或製表符+“網關”+空格或製表符)
  • 150.0.3.254 -> 是所需的網關

最好的祝福

引用自:https://serverfault.com/questions/673789