У меня есть следующий текстовый вывод команды (cmdagent -i), который я анализирую с помощью awk:
Component: McAfee Agent
AgentMode: 1
Version: 5.0.6.491
GUID: f0bcc8de-1aa6-00a4-01b9-00505af06706
TenantId: N/A
LogLocation: /var/McAfee/agent/logs
InstallLocation: /opt/McAfee/agent
CryptoMode: 0
DataLocation: /var/McAfee/agent
EpoServerList: 10.0.25.15|epo1|epo1.example.com|10.0.25.20|epo2|epo2.example.com
EpoPortList: 443
EpoServerLastUsed: 10.0.25.15
LastASCTime: N/A
LastPolicyUpdateTime: 0
EpoVersion: 5.3.1
Component: McAfee Agent
Я бы хотел сопоставить строку, начинающуюся со строки «EpoServerList», и распечатать только IP-адреса, содержащиеся в этой строке, используя только 1 команду awk.
Если я использую две команды awk, я могу заставить их работать, но я знаю, что это может быть сделано только с одной.
Например:
# ./cmdagent -i | awk '/^EpoServerList/' | awk -v RS='([0-9]+\\.){3}[0-9]+' 'RT{print RT}'
Что дает следующий (желаемый) вывод:
10.0.25.15
10.0.25.20
До сих пор я пробовал следующее:
# ./cmdagent -i | awk -v RS='([0-9]+\\.){3}[0-9]+' '$0 ~ /^EpoServerList/ RT{print RT}'
Который не возвращает совпадений
И
./cmdagent -i | awk -v RS='([0-9]+\\.){3}[0-9]+' '$0 ~ /^EpoServerList/; RT{print RT}'
Возвращает номер версии из ненужной строки:
5.0.6.491
10.0.25.15
10.0.25.20
И, похоже, не учитывает "/ ^ EpoServerList /", который я пытаюсь использовать в качестве критерия для исключения строки, содержащей строку версии "5.0.6.491"
Как я могу сопоставить в EpoServerList и при этом использовать разделитель записей с регулярным выражением для сопоставления и печати IP-адресов, используя всего 1 оператор awk?
Это GNU Awk 4.0.2 на RHEL 7 x86_64 с использованием оболочки bash.