it-swarm.com.de

Mit sed eine Zeichenfolge mit einem Trennzeichen aufteilen

Ich habe eine Zeichenfolge im folgenden Format:

string1:string2:string3:string4:string5

Ich versuche, sed zu verwenden, um die Zeichenfolge in : zu teilen und jede Teilzeichenfolge in einer neuen Zeile zu drucken. Folgendes mache ich:

cat ~/Desktop/myfile.txt | sed s/:/\\n/ 

Dies druckt:

string1
string2:string3:string4:string5

Wie kann ich erreichen, dass jedes Trennzeichen getrennt wird?

40
hax0r_n_code

Um einen String mit einem Trennzeichen mit GNU sed zu teilen, sagen Sie:

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

So können Sie beispielsweise : als Trennzeichen aufteilen:

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

Oder mit einem Nicht-GNU-Sed:

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

In diesem Fall haben Sie die g nach der Ersetzung verpasst. Daher wird es nur einmal gemacht. Sehen:

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

g steht für global und bedeutet, dass die Ersetzung global erfolgen muss, dh für jedes Vorkommen. Vergewissern Sie sich, dass der Standardwert 1 ist, und wenn Sie beispielsweise 2 eingeben, wird dies zweimal ausgeführt usw.

Alles in allem müssten Sie in Ihrem Fall Folgendes verwenden:

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

Beachten Sie, dass Sie die sed ... file-Syntax anstelle von unnötigem Piping direkt verwenden können: cat file | sed.

52
fedorqui

Die Verwendung von \n in sed ist nicht portabel. Mit sed können Sie das tun, was Sie wollen:

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

aber in Wirklichkeit ist dies ohnehin kein Job für sed, es ist der Job, für den tr geschaffen wurde:

tr ':' '
' < ~/Desktop/myfile.txt
27
Ed Morton

Verwenden Sie einfach tr :

$ tr ':' $'\n' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5

Wenn Sie wirklich sed brauchen:

$ sed 's/:/\n/g' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
22
Gilles Quenot

Das könnte für Sie funktionieren (GNU sed):

sed 'y/:/\n/' file

oder vielleicht:

sed y/:/$"\n"/ file
3
potong

Das sollte es tun:

cat ~/Desktop/myfile.txt | sed s/:/\\n/g
0
Jiminion

Wenn Sie gnu sed verwenden, können Sie \x0A für Zeilenumbrüche verwenden:

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