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?

amphibient
quelle

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 ...
Gilles Quenot
quelle
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
Ferrants
quelle
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"
Phyatt
quelle