Ich habe ein kleines Skript, das einige global
Zeichenfolge Ersetzungen in verschiedenen Dateien tut. Dies sollte mit sed
getan werden, so dass nur die betroffenen Zeilen geändert werden.sed funktioniert nicht wie erwartet mit Variablen im Skript
Zubereitung:
#!/bin/sh
find="Mücke Motorsport"
replace="Mücke Motorsport Racing Team"
file="/Users/meyer/Dropbox/Dev/App Framework iOS/dev/myfile.txt"
Dies ist meine problematische Zeile im Skript:
sed -i s/"$find"/"$replace"/g "$file"
funktioniert nicht (sed: 1: "/Users/meyer/Dropb ...": invalid command code o
). Nächster Versuch:
sed -i 's/'"$find"'/'"$replace"'/g' "$file"
Funktioniert nicht (sed: 1: "/Users/meyer/Dropb ...": invalid command code o
). Nächster Versuch:
sed -i "s/$find/$replace/g" "$file"
Funktioniert nicht (sed: 1: "/Users/meyer/Dropb ...": invalid command code o
). Nächster Versuch:
sed -i s/$find/$replace/g "$file"
Funktioniert nicht (sed: 1: "Motorsport/Mücke": invalid command code M
). Aufgrund dieser Fehlermeldung habe ich versucht, meine Variablen zu entkommen:
escaped_ find =$(printf '%s\n' "$find" | sed 's:[][\/.^$*]:\\&:g')
escaped_ replace =$(printf '%s\n' "$replace" | sed 's:[\/&]:\\&:g;$!s/$/\\/')
Aber Verwendung der Variablen ersetzen does't Arbeit ... Ich weiß nicht, wie diese Arbeit zu bekommen :(
Welches Betriebssystem verwenden Sie? –
Könnte das ein Codierungsproblem sein? Siehe diesen Beitrag: https://stackoverflow.com/questions/67410/why-does-sed-fail-with-international-characters-and-how-to-fix. 'sed -i" s/$ find/$ replace/g "" $ file "' funktioniert für mich. – piarston
@YuriyZhigulskiy Ich benutze Mac OS (10.11 El Capitan) –