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.


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.


Eu não estava incluindo as aspas em torno de $ DefaultPath obrigado
lonewarrior556

hahha, agora você está se mostrando
lonewarrior556
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.