sed mit Literalzeichenfolge - keine Eingabedatei


91

Dies sollte einfach sein: Ich möchte sed für eine Literalzeichenfolge ausführen , nicht für eine Eingabedatei. Wenn Sie sich fragen, warum, müssen Sie beispielsweise in Variablen gespeicherte Werte bearbeiten, nicht unbedingt Textdaten.

Wenn ich es tue:

sed 's/,/','/g' "A,B,C"

Dabei ist A, B, C das Literal, das ich in A ',' B ',' C ändern möchte

Ich bekomme

Can't open A,B,C

Als ob es A, B, C für eine Datei hält.

Ich habe versucht, es zu wiederholen:

echo "A,B,C" | sed 's/,/','/g' 

Ich bekomme eine Aufforderung.

Was ist der richtige Weg, um es zu tun?

Antworten:


147

Sie haben einen Konflikt mit einfachen Anführungszeichen. Verwenden Sie daher:

 echo "A,B,C" | sed "s/,/','/g"

Bei Verwendung können Sie auch tun ( <<<ist a here-string):

sed "s/,/','/g" <<< "A,B,C"

aber nicht

sed "s/,/','/g"  "A,B,C"

weil sederwarten Sie Datei (en) als Argument (e)

EDIT :

wenn du benutzt oder andere:

echo string | sed ...

1
seltsam, funktioniert nicht für mich ... zu erkennen, dass es einige Zeit her ist, dass dies veröffentlicht wurde, aber seltsame Ablehnung, wenn das das Problem ist
— Superheld

10

Funktioniert wie Sie wollen:

echo "A,B,C" | sed s/,/\',\'/g

5

Meine Version mit Variablen in einem Bash-Skript:

Suchen Sie nach Schrägstrichen und ersetzen Sie diese durch Schrägstriche:

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
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.