GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de sed pour diviser une chaîne avec un délimiteur

Pour diviser une chaîne avec un délimiteur avec GNU sed, vous dites :

sed 's/delimiter/\n/g'     # GNU sed

Par exemple, pour diviser en utilisant : comme délimiteur :

$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you

Ou avec un sed non-GNU :

$ sed $'s/:/\\\n/g' <<< "he:llo:you"
he
llo
you

Dans ce cas particulier, vous avez raté le g après le remplacement. Par conséquent, cela ne se fait qu'une seule fois. Voir :

$ echo "string1:string2:string3:string4:string5" | sed s/:/\\n/g
string1
string2
string3
string4
string5

g signifie g lobal et signifie que la substitution doit être effectuée globalement, c'est-à-dire pour toute occurrence. Voyez que la valeur par défaut est 1 et si vous mettez par exemple 2, cela se fait 2 fois, etc.

Tous ensemble, dans votre cas, vous auriez besoin d'utiliser :

sed 's/:/\\n/g' ~/Desktop/myfile.txt

Notez que vous pouvez directement utiliser le sed ... file syntaxe, au lieu de tubes inutiles :cat file | sed .


Utilisation de \n en sed n'est pas portable. Le moyen portable de faire ce que vous voulez avec sed est :

sed 's/:/\
/g' ~/Desktop/myfile.txt

mais en réalité ce n'est pas un travail pour sed de toute façon, c'est le travail tr a été créé pour faire :

tr ':' '
' < ~/Desktop/myfile.txt

Linux
  1. Comment remplacer une chaîne par une chaîne contenant une barre oblique avec Sed ?

  2. Supprimer tous les commentaires C avec Sed ?

  3. Envelopper le premier caractère d'une chaîne à l'aide de Sed ?

  4. Utiliser grep et sed pour rechercher et remplacer une chaîne

  5. Problème d'utilisation de xargs --max-args --replace avec le délimiteur par défaut

Remplacement de chaîne dans Bash

Remplacement de chaîne à l'aide d'un dictionnaire ?

Utiliser Word Wrap avec Mc ?

Comment diviser une chaîne dans un script bash

Comment écrire une chaîne de plusieurs lignes en utilisant Bash avec des variables ?

remplacer le texte de longueur égale en utilisant sed