Ersetzen: mit \ n mit sed

3

Ich versuche, meinen $ PATH in der Kommandozeile auszugeben, ersetze aber auch: mit \ n mit folgendem Befehl:

echo $PATH | sed s/:/\n/g

Das funktioniert nicht 100%, wie bekomme ich es zum Laufen?

josef.van.niekerk
quelle
3
Warum sed ? tut nicht tr ':' '\n' Arbeit ?
BatchyX
Ich verstehe deinen Kommentar nicht?
josef.van.niekerk
Verwenden Sie More Quotes ™ : echo "$PATH" | sed 's/:/\n/g'
l0b0
Die einfachste Lösung ist die Verwendung einer Bash-Substitution: echo "${PATH//:/$'\n'}"
Binary Phile

Antworten:

5

Sie müssen dem Backslash entkommen, d. H.

echo $PATH | sed s/:/\\n/g

Oder, wie BatchyX feststellte

echo $PATH | tr ':' '\n'

Wenn Sie $ PATH parsen möchten, können Sie auch eine andere Möglichkeit verwenden

IFS=:
for i in $PATH; do
   echo $i
done

Hier IFS=: erzählt bash Saiten an teilen :. Bitte beachten Sie, dass dies auch andere Dinge in der aktuellen Sitzung ändern wird. Ausschnitt aus man bash:

IFS Das interne Feldtrennzeichen, das zur Wortaufteilung verwendet wird   nach der Erweiterung und um Zeilen in Worte zu teilen                 mit dem Befehl read builtin. Der Standardwert ist <space><tab><newline>

mpy
quelle
Tut das nicht : müssen auch rückwärts gekreuzt werden?
pratnala
@pratnala: Ich glaube nicht ... Ich habe den Befehl erfolgreich in Bash und Zsh getestet.
mpy
Wenn ich Ihr erstes Beispiel in der cmd-Zeile ausführe, werden die Doppelpunkte ersetzt, jedoch mit einem \ n \ n, so dass mein Pfad an den Doppelpunkten nicht in neue Zeilen aufgeteilt wird.
josef.van.niekerk
1
@mpy Ich glaube nicht, dass du den Backslash da entkommen musst \n als Ganzes das Rückkehrzeichen darstellt, nicht wahr? Durch das Entkommen des Backslashs werden '\' und 'n' zu zwei getrennten Zeichen
pratnala
1
Du musst dem entkommen \ weil das sed-Muster nicht zitiert wird. Eine robustere Methode wäre die Antwort von @ user1936123.
terdon
4

Sie können auch den regulären Ausdruck zitieren:

echo $PATH | sed 's/:/\n/g'

Für Ihre \ n Literale können Sie verwenden echo -e.

user1936123
quelle
@ josef.van.niekerk: Funktioniert dieser Befehl für Sie? (Ich würde annehmen, dass es mit meinem ersten identisch ist - \ n wird direkt an sed übergeben.)
mpy