Как использовать 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>/' -> the
s` означает замену шаблона на replacemnet[ \t]+
-> Пробел или Tab одно или несколько вхождений.[0-9.]+
-> Цифры от 0 до 9 и точки в одном или нескольких экземплярах (для ip)(PATTERN) \1
-> Узор внутри ()
хранится как группа 1 \1
, поэтому он будет использован при замене (в данном случае пробелы или табуляция + "шлюз" + пробелы или табуляции)150.0.3.254
-> Желаемый шлюзС уважением