Nenhum resultado ao usar Múltiplos arquivos de gravação e sed no shell script

2

Eu gostaria de trocar variáveis do arquivo antigo para o novo arquivo quando eu uso uma única linha como essa

cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile

Há resultado de newFile.

Mas quando eu uso mais de duas linhas da seguinte forma:

cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile

cat newFile | sed "s@$dayAvgInNew@$dayAvgIn@g" > newFile

cat newFile | sed "s@$dayCurInNew@$dayCurIn@g" >  newFile

nenhum resultado de newFile. Eu tento usar o sono, mas não funciona. PS. A segunda e terceira linha eu troco a variável no mesmo arquivo. algum conselho?

    
por user43755 25.07.2013 / 05:23

2 respostas

3

O redirecionamento atropela (limpa) o arquivo antes que o comando seja executado. O comando sponge de moreutils , absorve sua entrada padrão antes de gravar em um arquivo. Dessa forma, o arquivo é sobrescrito após o comando ser executado.

cat ../oldFile.html | sed "s@$dayMaxInNew@$dayMaxIn@g" > newFile
cat newFile | sed "s@$dayAvgInNew@$dayAvgIn@g" | sponge newFile
cat newFile | sed "s@$dayCurInNew@$dayCurIn@g" | sponge  newFile

Se você não tiver mais recursos, poderá usar arquivos temporários. Observe também que você não precisa usar cat .

sed "s@$dayMaxInNew@$dayMaxIn@g" < ../oldFile.html > newFile
sed "s@$dayAvgInNew@$dayAvgIn@g" < newFile | sponge newFile
sed "s@$dayCurInNew@$dayCurIn@g" < newFile | sponge  newFile

E, finalmente, você pode combinar vários comandos sed em um.

sed "s@$dayMaxInNew@$dayMaxIn@g
     s@$dayAvgInNew@$dayAvgIn@g
     s@$dayCurInNew@$dayCurIn@g" < ../oldFile.html > newFile

ou

sed -e "s@$dayMaxInNew@$dayMaxIn@g" \
    -e "s@$dayAvgInNew@$dayAvgIn@g" \
    -e "s@$dayCurInNew@$dayCurIn@g" < ../oldFile.html > newFile
    
por 25.07.2013 / 05:39
2

Nunca consuma dados de um arquivo para o qual você está redirecionando; o redirecionamento irá destruir o arquivo, geralmente antes de você ter a chance de lê-lo. Use vários comandos sed .

sed "command1;command2;command3" < ../oldfile.html > newFile
    
por 25.07.2013 / 05:26

Tags