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?


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>


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.


@ 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.