对于脚本中的变量,SED不能按预期工作 [英] sed does not work as expected with variables in script

查看:32
本文介绍了对于脚本中的变量,SED不能按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个小脚本,它在各种文件中执行一些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
' "$find" | sed 's:[][/.^$*]:\&:g')
escaped_ replace =$(printf '%s
' "$replace" | sed 's:[/&]:\&:g;$!s/$/\/')
但是使用REPLACE变量不起作用.我不知道怎么让它工作:(

推荐答案

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

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

这篇关于对于脚本中的变量,SED不能按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆