Вот что я бы использовал:
... | grep -E 'port_num=.+' | sed 's/^.*port_num=\([^;]*\).*$/\1/'
Это работает с -o
на grep
или без него, и доступность -P
будет зависеть от версии grep
, которая у вас есть. (например, у моего grep
его нет). Я не говорю, что другие ответы, основанные на -P
, не очень хороши - они выглядят хорошо для меня. Но grep -P
будет менее переносимым.
ИМХО, конвейер grep
с sed
позволяет каждой утилите делать то, на чем она специализируется - grep
для выбора строк, sed
для изменения строк.