Como evitar que o comando sed sobrescreva o arquivo original e imprima um novo arquivo?

1

No arquivo UPPER.txt , preciso substituir APPLE e ORANGE por não-capital apple e orange . Eu também preciso manter o arquivo antigo UPPER.txt como estava e gerar um novo arquivo lower.txt . Eu estou usando os seguintes comandos:

sed 's/APPLE/apple/g' UPPER.txt > lower.txt
sed 's/ORANGE/orange/g' UPPER.txt > lower.txt

Mas o problema é que depois de executar o comando acima, UPPER.txt e lower.txt se tornam os mesmos itens que não são de capital. Eu quero que o UPPER.txt permaneça como era originalmente.

Como posso manter um backup do arquivo original depois de usar o sed? Como eu quero usar este comando em C ++ usando system(command) para operar nos arquivos, eu gostaria que todos os comandos fossem escritos em uma linha, então eu poderia passá-lo como string para o comando do sistema.

    
por Sepideha 21.04.2018 / 14:47

2 respostas

3

O comando que você mencionou sed 's/APPLE/apple/g' UPPER.txt > lower.txt não deve sobrescrever o original UPPER.txt , porque o comportamento padrão do sed é gravar em lower.txt . Há algo mais que você fez que pode ter substituído o arquivo original. sed não toca no arquivo original, a menos que você forneça -i flag. Para seus propósitos, sugiro fazer primeiro um backup do arquivo original, também conhecido como copiar.

Em uma nota secundária, lembre-se de que system() call é meio mal e não deve ser usado ,

    
por Sergiy Kolodyazhnyy 21.04.2018 / 17:15
2

Eu acho que você tem alguns mal entendidos.

O comando sed apenas exibe o resultado no bash. Não tem nada a ver com o arquivo original. O operador > apenas grava o resultado em um arquivo.

No entanto, se você quiser, há a opção -i , que pode editar o arquivo original. Com a opção -i vem o sufixo de backup (opcional).

$ cat UPPERCASE.txt 
APPLE
$ sed 's/APPLE/apple/g' UPPERCASE.txt
apple
$ sed 's/APPLE/apple/g' UPPERCASE.txt > lowercase.txt
$ cat UPPERCASE.txt 
APPLE
$ cat lowercase.txt 
apple
$ sed 's/APPLE/apple/g' -i[BACKUP] UPPERCASE.txt 
$ cat UPPERCASE.txt 
apple
$ ls
UPPERCASE.txt UPPERCASE.txt[BACKUP] lowercase.txt

Aqui, o arquivo [BACKUP] é o arquivo original.

    
por Olimjon 21.04.2018 / 15:07