Vincent1
@Vincent1

Есть ли lazy mode в регулярных выражениях AWK?

Задача в целом получить название интерфейса указав ip.
Есть такой вывод:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:51:e9:32 brd ff:ff:ff:ff:ff:ff
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
18: v6-1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 45.139.184.150 peer 209.51.161.14
19: v6-2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.161 peer 184.105.250.46
20: v6-3@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.162 peer 209.51.161.14
21: v6-4@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.160 peer 216.66.84.46

Я использую команду: ip link show | awk '/v6/,/185.230.140.160/{print $0}', чтобы получить последние 2 строки, но получается другое.
18: v6-1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 45.139.184.150 peer 209.51.161.14
19: v6-2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.161 peer 184.105.250.46
20: v6-3@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.162 peer 209.51.161.14
21: v6-4@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.160 peer 216.66.84.46

Как получить последние 2 строки?
Надо так:
21: v6-4@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/sit 185.230.140.160 peer 216.66.84.46
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
$ ip -j l | jq -r '.[] | select(.address=="185.230.140.160") | .ifname'


можно даже в столбик вывести все соответствия - ip-адрес и интерфейс
$ ip -j l | jq -r '.[] | "\(.address) \(.ifname)"'
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
fzfx
@fzfx
18,5 дм
может поможет.
$ ip -o a | grep 192.168.111.143 | awk '{print $2}'
enp2s0
Ответ написан
@Vitsliputsli
Если нужно обязательно через ip link show и awk:
ip link show | awk '/185.230.140.160/{print p $0; p=""; next} {p=$0 ORS}'

через ip link show и grep:
ip link show | grep -B1 185.230.140.160
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
ip с опцией -o

ip -o link show| awk '/185.230.140/{print $2}'
или так
ip -o link show| awk -F: '/185.230.140/{print $2}'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы