我有一個小腳本,可以在各種文件中執行一些global
字符串替換。這應該使用sed
完成,以便只更改受影響的行。sed不能像預期的那樣在腳本中使用變量
準備:
#!/bin/sh
find="Mücke Motorsport"
replace="Mücke Motorsport Racing Team"
file="/Users/meyer/Dropbox/Dev/App Framework iOS/dev/myfile.txt"
這是我的腳本問題的行:
sed -i s/"$find"/"$replace"/g "$file"
無效(sed: 1: "/Users/meyer/Dropb ...": invalid command code o
)。下一步嘗試:
sed -i 's/'"$find"'/'"$replace"'/g' "$file"
無效(sed: 1: "/Users/meyer/Dropb ...": invalid command code o
)。下一次嘗試:
sed -i "s/$find/$replace/g" "$file"
不起作用(sed: 1: "/Users/meyer/Dropb ...": invalid command code o
)。下一次嘗試:
sed -i s/$find/$replace/g "$file"
不起作用(sed: 1: "Motorsport/Mücke": invalid command code M
)。由於此錯誤消息的我試圖逃跑我的變量:
escaped_ find =$(printf '%s\n' "$find" | sed 's:[][\/.^$*]:\\&:g')
escaped_ replace =$(printf '%s\n' "$replace" | sed 's:[\/&]:\\&:g;$!s/$/\\/')
的替代變量簡化版,工作,但使用...我不知道如何得到這個工作:(
你使用哪個操作系統? –
這可能是一個編碼問題?看到這篇文章:https://stackoverflow.com/questions/67410/why-does-sed-fail-with-international-characters-and-how-to-fix。 'sed -i「s/$ find/$ replace/g」「$ file」'適用於我。 – piarston
@YuriyZhigulskiy我使用的Mac OS(10.11埃爾卡皮坦) –