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.