GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von sed zum Teilen einer Zeichenfolge mit einem Trennzeichen

Um eine Zeichenfolge mit einem Trennzeichen mit GNU sed zu teilen, sagen Sie:

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

Zum Beispiel zum Teilen mit : als Trennzeichen:

$ 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 speziellen Fall haben Sie die g verpasst nach dem Wechsel. Daher wird es nur einmal gemacht. Siehe:

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

g steht für g lobal und bedeutet, dass die Ersetzung global, also für jedes Vorkommen, erfolgen muss. Beachten Sie, 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 den sed ... file direkt verwenden können Syntax, statt unnötiger Pipings:cat file | sed .


Mit \n in sed ist nicht tragbar. Die tragbare Art, mit sed zu tun, was Sie wollen ist:

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

aber in Wirklichkeit ist das kein Job für sed jedenfalls ist es der Job tr wurde erstellt, um Folgendes zu tun:

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

Linux
  1. Wie ersetze ich eine Zeichenfolge durch eine Zeichenfolge, die Slash mit Sed enthält?

  2. Alle C-Kommentare mit Sed löschen?

  3. Sed mit Sonderzeichen verwenden?

  4. So teilen Sie eine Zeichenfolge in Bash-Skript auf

  5. Problem bei der Verwendung von xargs --max-args --replace with default delimiter

Ersetzen von Zeichenfolgen in Bash

String-Ersetzung mit einem Wörterbuch?

Zeilenumbruch mit Mc verwenden?

Verwenden von grep und sed zum Suchen und Ersetzen einer Zeichenfolge

Wie schreibe ich eine mehrzeilige Zeichenfolge mit Bash mit Variablen?

ersetzen Sie Text mit gleicher Länge mit sed