Grep saída de várias linhas em um ambiente de shell limitado

1

Eu tenho vasculhado a Web em busca de várias linhas de saída e, em seguida, imprimo as linhas que contêm as strings de que gosto. Na verdade, estou executando isso em um firewall de ponto de verificação e o comando é o seguinte: cphaprob -ia list quando executo que recebo várias linhas de saída. (abaixo). O que tentei fazer foi grep, sed ou pcregrep, a saída do comando para retornar somente certas partes. Meu pensamento era que eu poderia exportar o valor da posição 'x' usando o awk e, em seguida, imprimindo meu próprio comando echo com a variável. Mas eu tenho que pegar apenas as linhas com as quais me importo primeiro. Quero imprimir as linhas que mostram o nome do dispositivo e o 'estado'. Eu preferiria fazer isso in-line em vez de enviar os valores para um arquivo e executar um comando contra ele. Algo ao longo das linhas de

cphaprob -ia list | grep Name | grep state

Sei que o exemplo acima não funciona por vários motivos, mas expressa o que estou tentando fazer. Eu quero ter o shell imprimir em um bom formato algo ao longo do seguinte:

Device Name:x
Current State:y

e nada mais. há palavras extemporâneas em algumas das linhas, como tempo limite e tempo desde o último relatório que não quero exibir.

Eu não posso usar o Perl.

Alguém tem alguma sugestão?

P.S., a saída abaixo está na verdade em linhas diferentes, mas não consigo obter a saída neste site para exibi-lo como linhas separadas. Por exemplo, Nome do dispositivo: Estado atual da notificação do problema: OK é na verdade duas linhas. O estado atual é a próxima linha. Da mesma forma para o resto da saída também.

[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
    
por crazychris56 14.10.2014 / 15:52

2 respostas

1

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

fará.

    
por 14.10.2014 / 18:31
-1

Isso pode funcionar, embora, dependendo da sua saída, ele possa fornecer algumas correspondências extras que você não deseja (por exemplo, ele corresponderá às mesmas palavras e status também)

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

Não sei ao certo o que você quer dizer com:

there are extemporaneous words on some of the lines such as timeout and time since last report that I don't want displayed.

Se você quer dizer que há linhas com outras informações que você não deseja, então o texto acima deve limpar essas informações para você. Se você quer dizer que às vezes há informações extras na mesma linha que o nome do dispositivo ou o estado atual, e você não deseja que essas informações sejam exibidas, será necessária uma formatação adicional.

    
por 14.10.2014 / 18:07