Получить следующий символ, соответствующий строке - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь получить определенные данные, возвращаемые из командной строки. Вот моя командная строка:

snmpwalk -v2c -c community localhost 1.3.6.1.2.1.2 | grep tun0

Что дает мне в результате:

IF-MIB::ifDescr.4 = STRING: tun0

В этом результате я хочу получить 4. Я думал, используя регулярные выражения, но, возможно, есть более простой способ получить его.

Regex Я пытался:

\ifDescr.\s+\K\S+ https://regex101.com/r/9X04MD/1

[\n\r].*ifDescr.\s*([^\n\r]*) https://regex101.com/r/9X04MD/2

Я хотел бы получить его в одной командной строке, например

snmpwalk -v2c -c community localhost 1.3.6.1.2.1.2 | grep tun0 | ?

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Существует так много опций, которые не связаны с использованием экспериментальной опции GNU grep -P.Например, , учитывая только ваш пример ввода для обработки , вот один способ с любым sed:

$ echo "$out" | sed 's/.*\.\([0-9]\).*tun0/\1/'
4

или любым awk:

$ echo "$out" | awk -F'[. ]' '/tun0/{print $2}'
4
0 голосов
/ 26 апреля 2019

Я бы порекомендовал шаблон (?<=ifDescr\.)[^ =]+

Пояснение:

(?<=ifDescr\.) - положительный взгляд за спиной, утверждающий, что предшествует wat - ifDescr.

[^ =]+ соответствует одному или нескольким символам, отличным от пробела или знака равенства =

Демо

...