GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di sed per dividere una stringa con un delimitatore

Per dividere una stringa con un delimitatore con GNU sed si dice:

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

Ad esempio, per dividere utilizzando : come delimitatore:

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

O con un sed non GNU:

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

In questo caso particolare, hai perso il g dopo la sostituzione. Quindi, è solo fatto una volta. Vedi:

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

g sta per g lobal e significa che la sostituzione deve essere effettuata globalmente, cioè per ogni occorrenza. Vedi che il valore predefinito è 1 e se metti per esempio 2, viene fatto 2 volte, ecc.

Tutti insieme, nel tuo caso dovresti usare:

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

Nota che puoi usare direttamente il sed ... file sintassi, invece di piping non necessario:cat file | sed .


Usando \n in sed non è portatile. Il modo portatile per fare quello che vuoi con sed è:

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

ma in realtà questo non è un lavoro per sed comunque, è il lavoro tr è stato creato per fare:

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

Linux
  1. Come sostituire una stringa in un file?

  2. Utilizzando Notifica-Invia con Cron?

  3. Aggiunta con 'sed'?

  4. Come sostituire una stringa con una stringa contenente una barra con Sed?

  5. Come dividere una stringa nello script Bash

Sostituzione di String in Bash

Dividere i singoli caratteri usando la stringa nulla?

Sostituzione di stringhe usando un dizionario?

Usare l'a capo automatico con Mc?

Utilizzo di grep e sed per trovare e sostituire una stringa

Come modificare un file sul posto usando awk? (come con sed -i)