如何正确设置sed命令

海森堡

当我尝试以下命令时,(我想重写 sql)。

Day='2020/12/1'
Dir=/home/test/data


sql=`cat $Dir"/"$test".sql" | sed -e "s/Day/$Day/g"`

我遇到了以下错误。

sed: -e expression #1, char 24: unknown option to `s'

为什么s被认为是选项?为什么这个命令不能正常工作?

如果有人有意见,请告诉我

谢谢

斯蒂芬·查泽拉斯

如果/用作s/pattern/replacement/flags sed命令的分隔符,则需要/在模式和替换中转义最好使用既不在模式中也不在替换中出现的分隔符:

Day='2020/12/1'
Dir=/home/test/data


sql=$(sed "s|Day|$Day|g" < "$Dir/$test.sql")

由于您正在标记zsh,您还可以执行以下操作:

sql=${"$(<$Dir/$test.sql)"//Day/$Day}

然后,您不必担心此类问题,也不必担心字节无法在语言环境中形成有效字符。

对于多次更换:

typeset -A replace=(
  Day   "$Day"
  Month "$Month"
  Year  "$Year"
  '*'   Star
)
pattern="(${(j[|])${([email protected])replace}})"
set -o extendedglob
sql=${"$(<$Dir/$test.sql)"//(#m)$~pattern/$replace[$MATCH]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章