grep uma string específica da saída

1

Eu quero grep e imprimir string desativada abaixo da saída

$ grep "s_icsmstatus" $CONTEXT_FILE
<oa_service_status oa_var="s_icsmstatus">disabled</oa_service_status>

Eu posso usar algo como

$ grep "s_icsmstatus" $CONTEXT_FILE | awk -F ">" '{print $(NF-1)}' | awk -F "</" '{print $(NF-1)}'
disabled

Mas há alguma maneira alternativa ou simples de fazer isso?

    
por Vijay 24.07.2017 / 20:37

3 respostas

1

Use grep -o :

grep "s_icsmstatus" $CONTEXT_FILE | grep -o 'disabled' 

-o fornece como saída o nly a correspondência exata para o padrão fornecido, em vez da linha inteira na qual a correspondência é feita.

    
por 24.07.2017 / 20:41
1

grep não é a melhor ferramenta para analisar tags html, mas com uma pequena ajuda da sintaxe P erl pode-se fazer o seguinte:

$ grep -Po 's_icsmstatus">\K[^<]*' $CONTEXT_FILE
disabled

a parte essencial é \K , que corta tudo o que foi correspondido até agora, e nós imprimimos apenas descanso, ou seja, tudo até o próximo < .

    
por 24.07.2017 / 20:49
0

Você pode usar o seguinte, que é um pouco mais universal, pois pode capturar qualquer palavra entre as tags XML ... não apenas a palavra "disabled":

grep "s_icsmstatus" test.txt | awk -F ">" '{print $ 2}' | awk -F "<" '{print $ 1}'

Referência: link

    
por 24.07.2017 / 21:22