Bash脚本sed使用导致ZSH出现问题
我有一个Bash脚本,用于拉入几个repo来创建项目工作流的一个新实例,它根据命令行提供的信息执行大量字符串替换 一位同事使用ZSH,并且遇到了一些问题,这些问题似乎是由于脚本中使用了Bash脚本sed使用导致ZSH出现问题,bash,shell,sed,zsh,Bash,Shell,Sed,Zsh,我有一个Bash脚本,用于拉入几个repo来创建项目工作流的一个新实例,它根据命令行提供的信息执行大量字符串替换 一位同事使用ZSH,并且遇到了一些问题,这些问题似乎是由于脚本中使用了sed。特别是它似乎没有处理正则表达式?例如 # Author Name. if [[ $authorname ]] then sed -i "" "s/Author Name/$authorname/g" "$file" fi 导致以下错误: sed: can't rea
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都友好的字符串替换?如果这样做:
sed -i "" "s/Author Name/$authorname/g" "$file"
第一个参数“
被视为正则表达式,其他参数被视为文件,因此您将得到错误
只需删除命令行的”
或者,如果命令是动态的,则可以执行以下操作:
sed -i -e "" -e "s/Author Name/$authorname/g" "$file"
第一个正则表达式将被忽略。假定您使用的是GNU
sed
,它不会像BSDsed
那样采用-i”“
模式来就地编辑文件
从man sed
:
-i[后缀],--就地[=后缀]
您需要删除以下内容之间的空格:
sed -i"" "s/Author Name/$authorname/g" "$file"
或者,由于您不需要任何备份,只需执行以下操作:
sed -i "s/Author Name/$authorname/g" "$file"
不过,这将在*BSD上失败。没有一种跨平台使用
-i
的可移植方式。而且,sed-i”“…
完全等同于sed-i…
-i”“
,在删除引号后,与-i
是同一个词。