替换前如何处理sed替换

替换前如何处理sed替换

假设我有这样的文字: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 ~]#

相关内容