Substitua uma sequência de caracteres em um arquivo e sobrescreva o arquivo

4

Eu escrevi meu script usando o diretório ~/deleted(é um script longo). depois de usar ~/deletedo script inteiro. Quero deixar o usuário escolher o diretório, colocando o caminho ~/.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 todos ~/deleted com $defaultpathno meu script. Existe uma maneira de fazer isso na linha de comando para salvar e substituir o arquivo original?

Não consigo fazer perl ou sed trabalhar.

lonewarrior556
fonte
O primeiro DefaultPath line = ~ / excluídos serão adicionados novamente depois de tudo "~ / apagou" cordas foram substituídos por $ DefaultPath
lonewarrior556
Existe um motivo para você não criar um novo arquivo e renomeá-lo para substituir o arquivo antigo?
Celtschk 6/08
1
seddeve ser suficiente. O que você tentou?
Bernhard

Respostas:

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

Explicação:

  • -idiz sedpara modificar o arquivo no lugar.

  • s|~/deleted|"$defaultpath"|gdiz sedpara substituir ~/deletedcom "$defaultpath"onde quer que o encontre.

Recurso extra: preservar ~ / excluído na terceira linha

Você não pediu isso, mas, no seu exemplo de script, seria bom deixar ~/deletedinalterado na terceira linha em que é usado para definir defaultpath. Para alterar todas as instâncias, ~/deleted exceto a da terceira linha, use:

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

Isso adiciona o único sedcomando 3nque diz sedpara pular a terceira linha.

John1024
fonte
Eu não estava incluindo as aspas em torno de $ DefaultPath obrigado
lonewarrior556
hahha, agora você está se mostrando
lonewarrior556