置換する前に 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

バッシュ使用:

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 ~]#

関連情報