sed substituir com valor de um argumento [duplicado]

0

Embora isso pareça uma tarefa simples, a chamada sed não substitui o valor que eu envio para IP. Em vez disso, ele está substituindo o host local por "$ {IP}".

substitute() {
    export IP=$1
    echo $IP
    LC_ALL=C find . -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' {} \;
}

substitute 10.20.30.40

Como obtenho meu propósito de substituir por um argumento de valor?

    
por Senthil Kumaran 11.05.2016 / 19:15

1 resposta

1

Suas aspas simples estão impedindo que o $ {IP} seja interpolado no valor. bash -x ajudaria (por exemplo, adicione -x a um shebang de #! / bin / bash no script)

    + substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/"${IP}"/g' '{}' ';'

se você trocá-los,

   + substitute 10.20.30.40
+ export IP=10.20.30.40
+ IP=10.20.30.40
+ echo 10.20.30.40
10.20.30.40
+ LC_ALL=C
+ find /tmp -type f -name '*.txt' -exec sed -i.bak 's/localhost/'\''10.20.30.40'\''/g' '{}' ';'

a interpolação funciona. Não tenho certeza se quero citações no final, mas ...

    
por 11.05.2016 / 19:50

Tags