2012-10-24 12 views
56

Dies sollte einfach sein: Ich möchte sed gegen eine literale Zeichenfolge, keine Eingabedatei ausführen. Wenn Sie sich fragen, warum, ist es zum Beispiel zu bearbeiten Werte in Variablen gespeichert, nicht unbedingt Textdaten.sed mit Literal String - keine Eingabedatei

Wenn ich tun:

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

wobei A, B, C die wörtliche ist, den ich A ändern wollen ' 'B',' C

ich

Can't open A,B,C 

Als ob es denkt, A, B, C ist eine Datei.

Ich habe versucht, kochend es echo:

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

ich eine Eingabeaufforderung erhalten.

Was ist der richtige Weg?

Antwort

85

Sie haben einen einfachen Anführungszeichen Konflikt, so verwenden:

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

Wenn verwenden, können Sie auch tun (<<< ist ein here-string):

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

aber nicht

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

weil sed Datei (en) als Argument erwarten ment (e)

EDIT:

wenn Sie oder alle anderen Arbeits verwenden:

echo string | sed ... 
6

Arbeiten wie Sie wollen:

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

in ein Meine Version mit Variablen Bash-Skript:

Finden Sie ein ny Backslashes und ersetzen durch Schrägstriche:

input="This has a backslash \\" 

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

echo "$output" 
Verwandte Themen