Самый простой способ сделать это - просто сохранить предыдущую строку в переменной, а затем ссылаться на нее, когда вам это нужно.Например, с помощью следующего скрипта awk
:
/192/ {print lastline}
{ lastline=$0 }
Если я дам ему следующий результат:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 64:00:6a:7d:06:1a brd ff:ff:ff:ff:ff:ff
inet 192.168.1.24/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 67513sec preferred_lft 67513sec
inet6 fe80::5da1:2401:a725:d2e0/64 scope link
valid_lft forever preferred_lft forever
Я получу в качестве вывода:
link/ether 64:00:6a:7d:06:1a brd ff:ff:ff:ff:ff:ff
Конечно, интерфейсы могут иметь несколько адресов, и это может привести к сбою, если ваш интерфейс выглядит, например:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 64:00:6a:7d:06:1a brd ff:ff:ff:ff:ff:ff
inet 172.16.32.1/24 brd 172.16.32.255 scope global dynamic eth0
valid_lft 67513sec preferred_lft 67513sec
inet 192.168.1.24/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 67513sec preferred_lft 67513sec
inet6 fe80::5da1:2401:a725:d2e0/64 scope link
valid_lft forever preferred_lft forever
Вместо того, чтобы смотреть на «предыдущую строку», лучше явно записать MAC-адрес:
/192/ {print hwaddr}
/link\/ether/ {hwaddr=$0}
Это всегда будет печатать значение предыдущей строки link/ether
.