Как искать и извлекать строку из вывода команды?

несколько IP-адресов позволяют вам иметь служебные IP-адреса, другими словами, вы можете сопоставить IP-адрес с определенной службой, например, в sendmail вы делаете:

DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=192.168.1.25')dnl

и так далее. его можно использовать для высокой доступности, для тестирования и сетевой маршрутизации ^^

9
23.09.2017, 10:21
2 ответа

Использование sed

$ command | sed -n 's/.*text4://p'
 "lkpird sdfd"

-nговорит sed не печатать, если мы явно не попросим его об этом. s/.*text4://указывает sed удалить любой текст с начала строки до последнего вхождения text4:. Если такая строка найдена, то pуказывает sed напечатать ее.

Использованиеgrep -P

$ command | grep -oP '(?<=text4:).*' 
 "lkpird sdfd"

-oговорит grep печатать только совпадающую часть. (?<=text4:).*соответствует любому тексту, следующему за text4:, но не включает text4:.

Для опции -Pтребуется GNU grep. Таким образом, он не будет работать ни со встроенной в busybox grep, ни со стандартной grepв системах BSD/Mac OSX.

Использование awk

Исходное решение grep -awk можно упростить:

$ command | awk -F': ' '/text4: /{print $2}'
"lkpird sdfd"

Использование awk (альтернатива)

$ command | awk '/text4:/{sub(/.*text4:/, ""); print}'
 "lkpird sdfd"

/text4:/выбирает строки, содержащие text4:. sub(/.*text4:/, "")указывает awk удалить весь текст с начала строки до последнего вхождения text4:в строке. printуказывает awk напечатать эти строки.

24
27.01.2020, 20:05

С grepи его поддержкой PCRE и \Kуведомлением.

command |grep -Po 'text4: \K.*'
5
27.01.2020, 20:05

Теги

Похожие вопросы