1

Я искал в Интернете способы поиска по нескольким строкам вывода, а затем распечатывал строки, которые содержат строки, которые меня интересуют. На самом деле я запускаю это на брандмауэре контрольной точки, и команда выглядит следующим образом: cphaprob -ia list, когда я выполняю, что я получаю различные строки вывода. (ниже). Я попытался выполнить команду grep, sed или pcregrep для вывода только определенных частей. Я думал, что могу экспортировать значение позиции 'x' с помощью awk, а затем распечатать свою собственную команду echo с переменной. Но я должен сначала получить только те строки, которые мне нужны. Я хочу напечатать строки, которые показывают имя устройства и «состояние». Я бы предпочел сделать это в строке, а не выводить значения в файл и выполнить команду для него. Нечто подобное

cphaprob -ia список | grep Имя | Grep State

Я знаю, что приведенный выше пример не будет работать по разным причинам, но он отражает то, что я пытаюсь сделать. Я хочу, чтобы оболочка была напечатана в хорошем формате, что-то вроде следующего:

Имя устройства: х
Текущее состояние: у

и ничего больше. в некоторых строках есть лишние слова, такие как время ожидания и время с момента последнего отчета, которые я не хочу отображать.

Я не могу использовать Perl.

У кого-нибудь есть предложение?

PS, вывод ниже на самом деле в разных строках, но я не могу получить вывод на этом сайте, чтобы отобразить его в виде отдельных строк. Например, Имя устройства: Уведомление о проблеме Текущее состояние: на самом деле OK - это две строки. Текущее состояние - следующая строка. Аналогично и для остальной части продукции.

[Expert@firewall:0]# cphaprob -ia list

Built-in Devices:

Device Name: Problem Notification
Current state: OK

Device Name: Interface Active Check
Current state: OK

Device Name: HA Initialization
Current state: OK

Device Name: Load Balancing Configuration
Current state: OK

Device Name: Recovery Delay
Current state: OK

Registered Devices:

Device Name: Synchronization
Registration number: 0
Timeout: none
Current state: OK
Time since last report: 60485.9 sec

Device Name: Filter
Registration number: 1
Timeout: none
Current state: OK
Time since last report: 60484.8 sec

Device Name: cphad
Registration number: 2
Timeout: none
Current state: OK
Time since last report: 437745 sec

Device Name: fwd
Registration number: 3
Timeout: none
Current state: OK
Time since last report: 2.76118e+06 sec

Device Name: routed
Registration number: 4
Timeout: none
Current state: OK
Time since last report: 60478.4 sec

2 ответа2

1
cphaprob -ia list | grep -e "Name:" -e "state:"

Сделаю.

-1

Это может сработать, хотя, в зависимости от вашего вывода, оно может дать вам несколько дополнительных совпадений, которые вам не нужны (например, он будет соответствовать словам и статусу так же)

cphaprob -ia list | grep "[Ns][at][ma][et]e\?"

Я не уверен, что вы подразумеваете под:

в некоторых строках есть лишние слова, такие как время ожидания и время с момента последнего отчета, которые я не хочу отображать.

Если вы имеете в виду, что есть строки с другой информацией, которая вам не нужна, то вышеизложенное должно очистить ее для вас. Если вы имеете в виду, что иногда в одной строке с именем устройства или текущим состоянием имеется дополнительная информация и вы не хотите, чтобы эта информация отображалась, потребуется дополнительное форматирование.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .