【发布时间】:2018-04-04 07:05:37
【问题描述】:
使用 sed 将字符串替换为变量的内容,方法是用双引号 (") 而不是单引号 (') 将搜索表达式括起来。
$ astring="Liftoff in [sec]"
$ for s in 3 2 1; do echo $astring | sed -e "s/\[sec\]/$s/"; done
Liftoff in 3
Liftoff in 2
Liftoff in 1
但是,如果变量内容以特殊字符开头,我该如何进行上述替换?例如,变量内容可以以句点正斜杠 (./) 开头,如果本地文件路径作为变量传递,这通常是这种情况?
for s in ./3 ./2 ./1; do echo $astring | sed -e "s/\[sec\]/$s/"; done
sed: -e expression #1, char 14: unknown option to `s'
sed: -e expression #1, char 14: unknown option to `s'
sed: -e expression #1, char 14: unknown option to `s'
【问题讨论】:
-
问题出在:
s不应该包含替换值;它需要包含将进行所需替换的sed脚本的一部分。您没有将变量传递给sed;你动态生成一个sed脚本。
标签: bash variables sed replace