Sed Remplacer la nouvelle ligne par un espace

Sed Remplacer La Nouvelle Ligne Par Un Espace



Sous UNIX/Linux, la commande sed est un outil dédié à l'édition des flux. Il peut effectuer diverses opérations sur un flux de texte, telles que la recherche, la recherche et le remplacement, et l'insertion/suppression. Pour la plupart, cependant, sed est utilisé pour rechercher et remplacer le contenu du texte.

Dans ce guide, nous présenterons le remplacement des sauts de ligne par de l'espace à l'aide de sed.

Utiliser sed pour remplacer du texte

Tout d'abord, examinons rapidement comment effectuer une recherche et un remplacement de base à l'aide de sed. La même méthode sera utilisée lors du remplacement de nouvelles lignes par des espaces avec quelques options supplémentaires. La structure de commande est la suivante :







$ sed -e 's///'

Jetez un oeil à la commande suivante :



$ echo 'le renard brun rapide' | sed -e 's/rapide/rapide/g'



La commande echo imprime la chaîne à STDOUT . Le flux STDOUT est alors canalisé sed. Nous avons demandé à sed de remplacer toute instance de quick par fast. Enfin, la sortie est imprimée à l'écran.





Remplacer les sauts de ligne par de l'espace

Pour la démonstration, j'ai créé le fichier texte test.txt suivant avec plusieurs contenus factices :

$ chat test.txt



La commande sed accepte les expressions régulières pour décrire divers modèles. En tirant parti de cette fonctionnalité, nous allons décrire la nouvelle ligne comme \n. Essayons de remplacer les nouvelles lignes par des espaces :

$ sed -e 's/\n/ /g' test.txt

Cependant, cela n'a pas fonctionné comme prévu. Pour atteindre cet objectif, nous avons besoin de quelques options supplémentaires. Jetez un oeil à la commande suivante :

$ sed -e ':a;N;$!ba;s/\n/ /g' test.txt

La commande sed comporte plusieurs sections ; chacun désigne une tâche spécifique :

  • :a : Crée une étiquette 'a'
  • N : ajoute la ligne suivante à l'espace du motif
  • $!ba : si ce n'est pas la dernière ligne, retourne à l'étiquette 'a'
  • s/\n/ /g : recherche et remplace la nouvelle ligne (\n) par un espace (/ /). Le motif est mis en correspondance globalement (/g)

La commande sed parcourt les étapes jusqu'à ce qu'elle atteigne la dernière ligne, en remplaçant tous les caractères \n par un espace.

Au lieu de cette commande complexe, nous pouvons simplifier les choses en utilisant l'indicateur -z qui spécifie que sed fonctionne avec des enregistrements séparés par des valeurs nulles. La commande ressemblerait à ceci :

$ sed -z -e 's/\n/ /g' test.txt

Méthodes alternatives

Bien que sed puisse très bien faire la tâche, il existe des outils alternatifs. Dans cette section, nous en examinerons brièvement quelques-uns.

Pour l'exemple suivant, nous pouvons utiliser la commande tr pour remplacer une nouvelle ligne par un espace de manière simple :

$ tr '\n' ' ' < test.txt

Nous pouvons également utiliser perl pour faire le travail. La syntaxe suivante est également similaire à celle que nous avons utilisée avec sed (mais simplifiée) :

$ perl -p -e 's/\n/ /' test.txt

Une autre façon de remplacer les nouvelles lignes par des espaces consiste à utiliser la commande coller. Notez qu'il ne peut supprimer qu'un seul caractère :

$ coller -s -d ' ' test.txt

Semblable à sed, Linux est livré avec un autre outil awk. Semblable à sed, il peut également effectuer des remplacements avancés sur l'entrée. Pour notre propos, utilisez la commande awk suivante :

$ awk 1 ORS=' ' test.txt

Conclusion

Ce guide a exploré comment nous pouvons remplacer la nouvelle ligne par un espace en utilisant sed. Il a été réalisé de deux manières différentes. Ce guide comprend également d'autres outils pertinents que nous pouvons utiliser pour remplacer la nouvelle ligne par des espaces.

Au lieu d'utiliser des commandes complexes difficiles à mémoriser, nous utilisons les scripts Bash pour effectuer de nombreuses tâches sous Linux. Bien que cela se fasse au détriment de certaines performances, la flexibilité et la convivialité en valent la peine. En savoir plus sur Script bash pour les débutants .