Назад | Перейти на главную страницу

Как использовать 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.....

Как я могу изменить только октет хоста шлюза? Для этого у меня много машин, и каждая из них находится в разных сетях, но октет шлюза всегда один и тот же.

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

С уважением