sed: combina duas linhas

sed: combina duas linhas

Eu tenho um arquivo de texto, onde os registros são divididos em duas linhas. Eu gostaria de colocá-los em uma linha. Os registros são mais ou menos assim:

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet

Eu gostaria de obter o seguinte:

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet

Tentei com sed, mas não consigo combinar duas linhas. Existe algum truque sedou existe alguma ferramenta melhor?

Responder1

sed 'N;s/\n/ /'
  • Njunta a próxima linha de entrada ao espaço padrão
  • s/\n/ /substitui a nova linha que separa as linhas por um espaço.

ou:

sed -n 'N;s/\n/ /;/regex/p'
  • -ndesativa a impressão automática do espaço padrão como último comando
  • /regex/pimprime linhas correspondentes a regex

Use o gmodificador para as substituições caso você esteja juntando mais de duas linhas, por exemplo N;N;N;s/\n/ /g.

Responder2

Parece que as apt-getlinhas têm um espaço em branco anterior. Ditado:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

deve produzir o resultado desejado.

Alternativamente, você também pode usar paste:

paste -d' ' - - < inputfile

informação relacionada