[英]sed does not work as expected with variables in script
我有一个小脚本,可以在各种文件中进行一些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/$/\\/')
但是使用replace变量是行不通的...我不知道该如何使它工作:(
在sed的OSX版本上,-i选项需要扩展名参数,因此您的命令实际上被解析为扩展名参数,并且文件路径被解释为命令代码。
尝试显式添加-e参数
sed -i'' -e 's/old/new/g' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.