sed: correspond à deux lignes

J'ai un file text, où les dossiers sont divisés sur deux lignes. J'aimerais les mettre sur une seule ligne. Les disques ressemblent à quelque chose comme ceci:

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 

J'aimerais get ce qui suit:

 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 

J'ai essayé avec sed , mais je ne peux pas faire correspondre deux lignes. Y at-il un truc dans sed , ou y a-t-il un meilleur outil?

 sed 'N;s/\n/ /' 
  • N joint la ligne d'input suivante à l'espace de motif
  • s/\n/ / remplace la nouvelle ligne qui sépare les lignes avec un espace.

ou:

 sed -n 'N;s/\n/ /;/regex/p' 
  • -n désactive l'printing automatique de l'espace du motif en tant que dernière command
  • /regex/p affiche des lignes correspondant à regex

Utilisez le modificateur g pour les substitutions au cas où vous rejoindriez plus de deux lignes, par exemple N;N;N;s/\n/ /g .

Il semble que les lignes apt-get aient un espace blanc précédent. En disant:

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

devrait produire le résultat souhaité.

Alternativement, vous pouvez également utiliser la paste :

 paste -d' ' - - < inputfile