sed: une dos líneas

sed: une dos líneas

Tengo un archivo de texto donde los registros se dividen en dos líneas. Me gustaría ponerlos en una línea. Los registros se ven así:

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

Me gustaría obtener lo siguiente:

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

Lo intenté con sed, pero no puedo hacer coincidir dos líneas. ¿Hay algún truco sedo hay alguna herramienta mejor?

Respuesta1

sed 'N;s/\n/ /'
  • Nune la siguiente línea de entrada al espacio del patrón
  • s/\n/ /reemplaza la nueva línea que separa las líneas con un espacio.

o:

sed -n 'N;s/\n/ /;/regex/p'
  • -ndesactiva la impresión automática del espacio del patrón como último comando
  • /regex/pimprime líneas que coinciden con expresiones regulares

Utilice el gmodificador para las sustituciones en caso de que esté uniendo más de dos líneas, por ejemplo N;N;N;s/\n/ /g.

Respuesta2

Parece que las apt-getlíneas tienen un espacio en blanco delante. Dicho:

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

debe producir el resultado deseado.

Alternativamente, también puedes usar paste:

paste -d' ' - - < inputfile

información relacionada