Imprimir vários padrões de pesquisa em uma linha + manipulação de texto

2

Minha saída é assim:

 /map1/firmware1   Targets   Properties
     version=2.44
     date=Jul 19 2016
     name=iLO 4

Minha saída desejada é:

version=2.44 date=Jul_19_2016

Para mesclar a saída em uma linha, tentei usar xargs . Mas então ele só imprime data.

cat test | egrep '(version=|date=)' |xargs
 date=Jul 19 2016
    
por M.S. 16.09.2016 / 09:36

2 respostas

2

O problema do OP parece ser devido aos finais de linha do estilo dos ...

Exemplo:

$ cat -e chk 
 /map1/firmware1   Targets   Properties^M$
     version=2.44^M$
     date=Jul 19 2016^M$
     name=iLO 4^M$

$ egrep '(version=|date=)' chk | xargs
 date=Jul 19 2016

Após a conversão para o final da linha de estilo unix :

$ perl -i -pe 's|\r\n|\n|' chk 

$ cat -e chk 
 /map1/firmware1   Targets   Properties$
     version=2.44$
     date=Jul 19 2016$
     name=iLO 4$

$ egrep '(version=|date=)' chk | xargs
version=2.44 date=Jul 19 2016
    
por 16.09.2016 / 09:44
1

usando sed one-liner

$ sed -n '/version/ {N; s/[\r\n]//g; p}' filename
     version=2.44     date=Jul 19 2016

Explicação

  • /version/ corresponde ao padrão e executa o bloco de chaves { } .
  • N pega a próxima linha do arquivo de entrada e a anexa ao espaço padrão.
  • s/[\r\n]//g remove todas as novas linhas e retornos de carro do espaço padrão.
  • p imprime espaço padrão.
por 16.09.2016 / 09:44