繁体   English   中英

sed无法与脚本中的变量一起正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM