Forum Astuces.divers [Terminal] Fusionner les lignes d'un texte

Posté par  (site web personnel) .
Étiquettes : aucune
0
9
nov.
2006
Question: Sous GNU, comment supprimer rapidement les sauts de ligne d'un fichier, c'est-à-dire fusionner les lignes en une seule ?

Réponse: xargs < nomdefichier

Explication:
0. xargs a pour fonction de lire le texte donné sur son entrée standard et d'appeler une commande ayant pour arguments le texte en question. Par exemple: echo "/tmp" | xargs ls -l. Ici, xargs lira "/tmp" sur son entrée standard, et appellera donc ls -l /tmp.
1. Caractéristique notable de xargs: les sauts de ligne éventuels de l'entrée standard sont interprétés comme séparateurs d'arguments pour forger la commande finale, au même titre que les espaces.
2. Seconde caractéristique: en l'absence de commande passée à xargs, c'est "/bin/echo" qui est utilisé. On aurait pu donc écrire xargs echo < nomdefichier, ou encore le pléonasme fréquent: cat nomdefichier | xargs echo, mais c'est quand même moins joli :)
  • # Remarques post-modération

    Posté par  (site web personnel) . Évalué à 1.

    1. Sur la formulation: l'astuce parle de "fusionner" les lignes, mais ce n'est pas exact: ça met aussi une espace entre chaque ligne.

    2. Comme on vient de me faire remarquer, ça marche seulement si les lignes ne sont pas trop "bizarres". Par exemple si elles contiennent des guillemets simples ou doubles ça marche pas. Autre solution: un bête "tr":
    tr '\n' ' ' < nomdefichier

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.