Извлечь значение после паттерна через grep regex - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь извлечь значение из строки, используя grep через выражение регулярного выражения, дело в том, как получить значение ПОСЛЕ того, как найдено выражение.Как в этом примере:

tcp6   0    0   :::80   :::*     LISTEN     811/apache2

я мог бы получить значение 80, просто выполнив «[0-9] {2,}», проблема в том, что я также сопоставляю PID процесса «811»,как я могу получить только цифры после ":::"?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Следующие awk s могут помочь вам в этом.

Решение 1-е: Простейшие разделители поля с одним изменением на ::: и пробел и видят магию.

awk -F':::| +' '{print $5}' Input_file

Решение 2-е: С использованием sub только в 4-м столбце.

awk '{sub(/:+/,"",$4);print $4}'  Input_file

Решение 3-е: с использованием match функции awk для сопоставления регулярному выражению из трех двоеточий и цифр в строке.

awk 'match($0,/:::[0-9]+/){print substr($0,RSTART+3,RLENGTH-3)}'  Input_file

Решение 4-е: с использованием нескольких sub с в полной строке для получения ожидаемого результата.

awk '{sub(/[^:]*/,"");sub(/:::/,"");sub(/ +.*/,"");print}'  Input_file

ПРИМЕЧАНИЕ: Если вы используете команду с помощьюкоторый вы выводите на экран, тогда, несмотря на использование awk.... Input_file, используйте, например, -> your_command | awk... для всех вышеуказанных кодов.

0 голосов
/ 04 июня 2018

Предполагая GNU grep:

$ s="tcp6   0    0   :::80   :::*     LISTEN     811/apache2"
$ grep -oP ':::\K\d+' <<<"$s"
80
...