Substitui uma string em um arquivo e sobrescreve o arquivo

4

Eu escrevi meu script usando o diretório ~/deleted (é um longo script). depois de usar ~/deleted para o script inteiro. Eu quero deixar o usuário escolher o diretório colocando o caminho em ~/.rm.cfg .

Meu arquivo começa assim:

#!/bin/bash

defaultpath=~/deleted

if [ -s ~/.rm.cfg ]
then
    defaultpath=$(head -1 ~/.rm.cfg)
fi

Eu preciso substituir cada ~/deleted por $defaultpath no meu script. Existe uma maneira de fazer isso na linha de comando, de modo que ele salve e substitua o arquivo original?

Eu não consigo nem o perl nem o sed funcionarem.

    
por lonewarrior556 06.08.2014 / 19:45

1 resposta

8
sed -i 's|~/deleted|"$defaultpath"|g' file.sh

Explicação:

  • -i diz a sed para modificar o arquivo no lugar.

  • s|~/deleted|"$defaultpath"|g diz sed para substituir ~/deleted por "$defaultpath" onde quer que o encontre.

Recurso extra: preservar ~ / deletado na terceira linha

Você não solicitou isso, mas, em seu script de exemplo, seria interessante deixar ~/deleted inalterado na terceira linha em que é usado para definir defaultpath . Para alterar todas as instâncias de ~/deleted exceto aquela na terceira linha, use:

sed -i -e '3n' -e 's|~/deleted|"$defaultpath"|g' file.sh

Isso adiciona o único sed command 3n , que informa sed para pular a terceira linha.

    
por 06.08.2014 / 20:23