Como processar a substituição de sed antes de substituir

1

Digamos que eu tenha este texto: My name is #1#! .

Eu quero substituir o #1# por algo que depende do conteúdo entre o # , como:

if [ $thing_between_hash -eq 1 ]; then
  subs=John
else
  subs=Mary
fi

Em seguida, a saída seria:

My name is John!

Posso fazer isso com uma única substituição sed ? Como?

    
por Phelype Oleinik 30.12.2017 / 16:06

3 respostas

5

Com um sed que suporta -r :

sed -r -e 's/#1#/John/g; s/#[^#]+#/Mary/g' <<< 'My name is #1#, not #5#!'

caso contrário:

sed    -e 's/#1#/John/g; s/#[^#][^#]*#/Mary/g' <<< 'My name is #1#, not #5#!'
    
por 30.12.2017 / 16:19
1

Com bash:

something='My name is #1#!'
subs="John"

mod="${something/\#1\#/$subs}"

echo "$mod"

Saída:

My name is John!
    
por 30.12.2017 / 17:12
0

pode fazê-lo como:

 [root@h2g2w ~]# subs=john
 [root@h2g2w ~]# echo may name is 1 | sed
> 's/1/'$subs'/' 
  may name is john 
 [root@h2g2w ~]#
    
por 30.12.2017 / 16:18

Tags