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