sed 无法按预期使用脚本中的变量

Oli*_*pel 0 linux variables sed sh

我有一个小脚本可以做一些事情global在各种文件中进行一些字符串替换。应该这样做,sed以便仅更改受影响的行。

\n\n

准备:

\n\n
#!/bin/sh\nfind="M\xc3\xbccke Motorsport"\nreplace="M\xc3\xbccke Motorsport Racing Team"\nfile="/Users/meyer/Dropbox/Dev/App Framework iOS/dev/myfile.txt"\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我在脚本中出现问题的行:

\n\n
sed -i s/"$find"/"$replace"/g "$file"\n
Run Code Online (Sandbox Code Playgroud)\n\n

不起作用(sed: 1: "/Users/meyer/Dropb ...": invalid command code o)。下一步尝试:

\n\n
sed -i \'s/\'"$find"\'/\'"$replace"\'/g\' "$file"\n
Run Code Online (Sandbox Code Playgroud)\n\n

不起作用(sed: 1: "/Users/meyer/Dropb ...": invalid command code o)。下一步尝试:

\n\n
sed -i "s/$find/$replace/g" "$file"\n
Run Code Online (Sandbox Code Playgroud)\n\n

不起作用(sed: 1: "/Users/meyer/Dropb ...": invalid command code o)。下一步尝试:

\n\n
sed -i s/$find/$replace/g "$file"\n
Run Code Online (Sandbox Code Playgroud)\n\n

不起作用(sed: 1: "Motorsport/M\xc3\xbccke": invalid command code M). Because of this error message I tried to escape my variables:

\n\n
escaped_ find =$(printf \'%s\\n\' "$find" | sed \'s:[][\\/.^$*]:\\\\&:g\')\nescaped_ replace =$(printf \'%s\\n\' "$replace" | sed \'s:[\\/&]:\\\\&:g;$!s/$/\\\\/\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是使用替换变量确实\xc2\xb4t 工作...我不\xc2\xb4t 知道如何让它工作:(

\n

小智 7

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

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