347 Stimmen

Komma durch Zeilenumbruch in sed unter MacOS ersetzen?

Ich habe eine Datei mit Zeichenfolgen, die durch Kommas getrennt sind. Ich versuche, die Kommas durch eine neue Zeile zu ersetzen. Ich habe es versucht:

sed 's/,/\n/g' file

aber es funktioniert nicht. Was übersehe ich?

417voto

Prince John Wesley Punkte 60530

Verwenden Sie tr stattdessen:

tr , '\n' < file

348voto

Walter Mundt Punkte 23839

Verwenden Sie eine ANSI-C-Zeichenkette $'string'

Sie benötigen einen Backslash-escaped literal newline, um zu sed zu gelangen. Zumindest in der Bash, $'' Zeichenfolgen ersetzen \n mit einem echten Zeilenumbruch, aber dann müssen Sie den Backslash verdoppeln, den sed sieht, um den Zeilenumbruch zu umgehen, z.B.

echo "a,b" | sed -e $'s/,/\\\n/g'

Hinweis dies wird nicht bei allen Muscheln funktionieren aber bei den gängigsten funktionieren sie.

134voto

Max Nanasy Punkte 5583
sed 's/,/\
/g'

funktioniert unter Mac OS X.

26voto

nar8789 Punkte 607

Wenn Sie sed ausschließlich für Substitutionsausdrücke verwenden (so wie ich es tue), können Sie auch perl -pe stattdessen

$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g'
foo,
bar,
baz

18voto

Felix Punkte 455

MacOS ist anders, es gibt zwei Möglichkeiten, dieses Problem mit sed in mac zu lösen

  • zuerst, verwenden \'$'\n'' ersetzen. \n kann es unter MacOS funktionieren:

    sed 's/,/\'$'\n''/g' file
  • die zweite, verwenden Sie einfach eine leere Zeile:

    sed 's/,/\
    /g' file
  • Ps. Achten Sie auf den Bereich, der durch '

  • die dritte, die Verwendung von gnu-sed anstelle von mac-sed

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X