【发布时间】:2018-01-24 12:47:31
【问题描述】:
我有一个小脚本,可以在各种文件中进行一些global 字符串替换。这应该使用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/$/\\/')
但是替换变量的使用不起作用......我不知道如何让它工作:(
【问题讨论】:
-
您使用哪种操作系统?
-
这可能是编码问题吗?见这篇文章:stackoverflow.com/questions/67410/…。
sed -i "s/$find/$replace/g" "$file"为我工作。 -
@YuriyZhigulskiy 我使用 Mac OS (10.11 El Capitan)
-
仅供参考:对我的问题投反对票的原因是什么??