Como modificar o conteúdo do arquivo? [duplicado]

0

Ubuntu 16.04

Eu tenho um arquivo muito grande, portanto não é possível modificá-lo manualmente. Eu gostaria de mudar todas as ocorrências de

<tag1>true</tag1>

para

<tag1>false</tag1>
    
por St.Antario 08.11.2016 / 18:51

3 respostas

5

Você pode usar

sed -e 's|<tag1>false</tag1>|<tag1>true</tag1>|g' -i file

embora eu recomende fazer a edição para uma cópia do arquivo,

sed -e 's|<tag1>false</tag1>|<tag1>true</tag1>|g' file > newfile

e usando less para verificar se o novo conteúdo é aceitável; ou seja,

less newfile

Editado: observe o modificador g no final do padrão. É necessário, se puder haver mais de uma correspondência em uma linha. Quando g está presente, significa que todas as correspondências em uma linha são substituídas. Além disso, em vez de tags completas, você poderia considerar apenas

sed -e 's|>false<|>true<|g' file > newfile

ou talvez

sed -e 's|>[Ff]alse<|>true<|g' file > newfile

que altera >false< e >False< para >true< .

Você pode usar diff para comparar os dois arquivos, depois de usar um dos comandos acima. Uma opção é

diff --side-by-side file newfile | less

mas realmente não funciona se as linhas forem muito longas. O formato "diff unificado" é comumente usado,

diff -u file newfile | less

onde as linhas que começam com - são de file , as linhas que começam com + de newfile e as linhas que começam com um espaço são comuns a ambas.

    
por 08.11.2016 / 19:02
2

Se você deseja substituir apenas as ocorrências exatas de

<tag1>true</tag1>

para

<tag1>false</tag1>

você pode usar

sed -r 's@<(tag1)>true</>@<>false</>@g' infile >outfile

ou

sed -ri 's@<(tag1)>true</>@<>false</>@g' file

se você não quiser gravar os dados alterados em um novo arquivo.

    
por 08.11.2016 / 19:05
0

É fácil de conseguir com o comando sed .
Basta executar:

sed 's/true/false/' file > newfile
    
por 08.11.2016 / 18:56