$ awk -v host=c -v newip=zzz.zzz.zzz.zzz '$0 ~ "^host=" host "$" { print; getline; $0 = sprintf("ip=%s\s", newip) }; 1' file
ip=x.x.x.a
mask=255.0.0.0
host=a
ip=x.x.x.b
mask=255.0.0.0
host=b
ip=x.x.x.c
mask=255.0.0.0
host=c
ip=zzz.zzz.zzz.zzzs
blahblah
mask=255.0.0.0
host=d
Предполагается, что вы хотите изменить IP-адрес некоторого именованного хоста и что строка IP-адреса всегда находится после строки host=
для этого хоста.
Программа awk
берет имя хоста и новый IP-адрес в командной строке, устанавливая две переменные awk
host
и newip
. Затем код находит строку host=
, соответствующую заданному имени хоста, считывает и отбрасывает следующую строку (, строку ip=
, строку )и создает новую строку ip=
с новым IP-адресом. Данные (изменены или нет )выводятся завершающим 1
в программе.