sed在脚本中的变量不能正常工作

时间:2017-08-16 11:34:22

标签: linux variables sed sh

我有一个小脚本,可以在各种文件中执行一些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/$/\\/')

但替换变量的使用不起作用......我不知道如何使其工作:(

1 个答案:

答案 0 :(得分:2)

在sed的OSX版本上,-i选项需要一个扩展参数,因此您的命令实际上被解析为扩展参数,文件路径被解释为命令代码。

尝试显式添加-e参数 sed -i'' -e 's/old/new/g' file