br comando para anexar algumas linhas

1

Eu quero adicionar algumas linhas através de um script bash com sed. O script funciona, mas a saída está errada.

LINEB="word"
sed '/g id=\"..\"/a style=\"fill:$LINEB;\"' file.txt > foo.txt

Eu recebo <g id="ai" style="fill:$LINEB;"> em vez de <g id="ai" style="fill:word;">

Mesmo se eu usar todos os tipos de parênteses.

    
por M-Reda Daoudi 29.11.2015 / 22:46

2 respostas

1

Você não pode incorporar uma variável dentro de aspas simples. Você poderia:

  1. use aspas duplas em todo o script sed e escape com barra invertida para todas as aspas duplas dentro dele.

  2. termine a cadeia entre aspas simples com uma variável ' , aspas duplas e, em seguida, reinicie a cadeia entre aspas simples:

LINEB="word"
sed '/g id=\"..\"/a style=\"fill:'"$LINEB"';\"' file.txt > foo.txt
    
por 29.11.2015 / 22:52
0

Primeiro, você precisa tomar cuidado para que $LINEB esteja preparado adequadamente para o comando sed a ppend:

sed '/<\([^"<>]*\("[^"]*"\)* \)*g id="[^"][^"]"/a\'"$(echo;#"'
     printf 'style="fill:"%s"\n' "$LINEB" |
     sed 'H;1h;$!d;s/\/&&/g;s/\n/\&/g')
"    <infile >outfile

Também pode ser mais fácil localizar o texto a ppended em outro arquivo em que você pode usar r quando necessário:

printf 'style="fill:%s"\n' "$LINEB" >/tmp/LINEB
sed '/<\([^"<>]*\("[^"]*"\)* \)*g id="[^"][^"]"/r /tmp/LINEB' <infile >outfile
rm /tmp/LINEB

Isso não requer escapes.

    
por 29.11.2015 / 23:00