【问题标题】:sed does not work as expected with variables in script [duplicate]sed 不能按预期使用脚本中的变量 [重复]
【发布时间】:2018-01-24 12:47:31
【问题描述】:

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

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

【问题讨论】:

  • 您使用哪种操作系统?
  • 这可能是编码问题吗?见这篇文章:stackoverflow.com/questions/67410/…sed -i "s/$find/$replace/g" "$file" 为我工作。
  • @YuriyZhigulskiy 我使用 Mac OS (10.11 El Capitan)
  • 仅供参考:对我的问题投反对票的原因是什么??

标签: linux variables sed sh


【解决方案1】:

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

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

【讨论】:

  • 就是这样!谢谢!
猜你喜欢
  • 2018-01-22
  • 2011-03-13
  • 1970-01-01
  • 2019-05-18
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多