Bash脚本sed使用导致ZSH中的问题

时间:2016-09-05 11:59:12

标签: bash shell sed zsh

我有一个Bash脚本,用于引入多个repos来创建项目工作流的新实例,该实例根据命令行提供的信息执行大量字符串替换。

一位同事使用ZSH,并且遇到的问题似乎是在脚本中使用sed的结果。特别是它似乎没有处理正则表达式?例如......

    # Author Name.
    if [[ $authorname ]]
    then
    sed -i "" "s/Author Name/$authorname/g" "$file"
    fi

导致以下错误:

sed: can't read "s/Author Name/$authorname/g" : No such file or directory

我们发现通过添加-e标志,大多数字符串替换错误消失了,但是他仍然会收到一些“未找到”错误......

sed: can't read : No such file or directory

有没有更好的方法来执行Bash和ZSH友好的字符串替换?

2 个答案:

答案 0 :(得分:1)

如果你这样做:

sed -i "" "s/Author Name/$authorname/g" "$file"

第一个参数""被视为正则表达式,其他参数被视为文件,因此您将获得错误。

只需删除命令行的""即可。

或者,如果你的命令是动态的,你可以这样做:

sed -i -e "" -e "s/Author Name/$authorname/g" "$file"

第一个正则表达式将被忽略。

答案 1 :(得分:1)

假设您正在使用GNU sed,它不会像-i ""那样采用类似模式来编辑BSD sed等文件。

来自man sed

  

-i [SUFFIX], - in-place [= SUFFIX]

您需要删除其间的空格:

sed -i"" "s/Author Name/$authorname/g" "$file"

或者,由于您没有进行任何备份,只需执行以下操作:

sed -i "s/Author Name/$authorname/g" "$file"
相关问题