使用 sed 替换变量内容,并使用double(“)而不是single(')引号括起搜索表达式。
$ 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'
答案 0 :(得分:1)
您只需使用其他分隔符:
for s in ./3 ./2 ./1; do echo "$s" | sed -e "s|\[sec\]|$s|"; done
避免与您的输入冲突
答案 1 :(得分:0)
对于这个特定用例,不需要使用sed
,并且本机bash解决方案更简单,更高效,更少繁琐(因为您不需要担心分隔符或其他特殊字符在替换字符串中):
$ for s in ./3 ./2 ./1; do echo "${astring/\[sec\]/$s}"; done
Liftoff in ./3
Liftoff in ./2
Liftoff in ./1
请参阅Bash manual中的bash参数扩展语法列表。