Bash / Sed como inserir uma string com caracteres especiais em um arquivo

1

Eu tenho um script em que estou trabalhando atualmente. E me deparo com um problema em que preciso solicitar que um usuário insira uma string, depois criptografe isso com o sha-512 e insira-o em um arquivo específico

Até agora eu tenho:

pass= grub-crypt --sha512

O que retorna o valor de hash que eu preciso. No entanto, estou correndo para o problema em que sed lerá os caracteres especiais do hash.

Eu então tentei:

sed -i.bak "20i$pass" /foo/bar

Mas isso não funciona. Eu suponho que ainda está lendo os caracteres especiais quando ele substitui a variável pelos caracteres na string. Então, eu queria tentar adicionar um caractere de escape antes de cada caractere na string assim:

sed 's:\(.\{1\}\):g'

No entanto, isso não está funcionando para mim também. Eu sou novo em sed, então qualquer explicação seria muito útil. Obrigado.

    
por Afflickted 09.10.2014 / 15:37

1 resposta

1

Nos casos em que caracteres especiais como * . / $ são abundantes no texto, é mais fácil não usar inserir o texto diretamente. A alternativa é adicionar barras invertidas, que é uma solução manual monótona.

Em vez disso, use a função r sed - que lê o seguinte arquivo no endereço especificado (neste caso, linha 20). Observe que não há tratamento de erros neste código:

grub-crypt --sha512 > hash.tmp
sed -i.bak '20r hash.tmp /foo/bar      
rm hash.tmp  
    
por 09.10.2014 / 16:14

Tags