假设我有这样的文字:My name is #1#!
。
我想用#1#
取决于 之间内容的内容替换#
,例如:
if [ $thing_between_hash -eq 1 ]; then
subs=John
else
subs=Mary
fi
那么输出将是:
My name is John!
我可以通过一次替换来完成吗sed
?如何?
答案1
使用支持以下功能的 sed -r
:
sed -r -e 's/#1#/John/g; s/#[^#]+#/Mary/g' <<< 'My name is #1#, not #5#!'
否则:
sed -e 's/#1#/John/g; s/#[^#][^#]*#/Mary/g' <<< 'My name is #1#, not #5#!'
答案2
使用bash:
something='My name is #1#!'
subs="John"
mod="${something/\#1\#/$subs}"
echo "$mod"
输出:
我的名字是约翰!
答案3
可以这样做:
[root@h2g2w ~]# subs=john
[root@h2g2w ~]# echo may name is 1 | sed
> 's/1/'$subs'/'
may name is john
[root@h2g2w ~]#