br comando removendo # [duplicado]

0
    

Esta pergunta já tem uma resposta aqui:

    

Estou usando o comando abaixo sed, mas se MacAddressPasswordeRegisteryValue for WElcome12# , então, ele está produzindo WElcome12 e removendo # . Alguma maneira de evitar isso?

sed -i "s#^mac.address.sftp.user.password=.*#mac.address.sftp.user.password=${MacAddressPasswordeRegisteryValue#*=}#" $APP_CONFIG_FILE
    
por man 19.04.2018 / 21:54

1 resposta

1

Supondo que a senha possa conter qualquer caractere, nenhum delimitador usado para a expressão sed é seguro de usar. Se você tivesse, por exemplo, s/.../.../ e a senha continha / , você teria o mesmo problema novamente.

Portanto, não use sed aqui. Em vez disso,

awk -v pw="$MacAddressPasswordeRegisteryValue" \
    'BEGIN { OFS=FS="=" }
    $1 == "mac.address.sftp.user.password" { print $1, pw; next } 1' \
    "$APP_CONFIG_FILE" >"$APP_CONFIG_FILE"-new

Isso transformaria

mac.address.sftp.user.password=something old

em

mac.address.sftp.user.password=hello world !#$/

dado que $MacAddressPasswordeRegisteryValue foi a string hello world !#$/ . Outras linhas seriam passadas sem modificação para o novo arquivo "$APP_CONFIG_FILE"-new .

    
por 19.04.2018 / 22:05

Tags