Perl procura e substitui

5

Como posso usar a pesquisa e substituir para alterar o conteúdo de um arquivo.

Eu preciso mudar o 'all to none' e / ou 'none to all' sem ter que fazer manualmente todas as vezes por centenas de linhas.

abaixo é um arquivo de texto de amostra com números de linhas à direita. Eu sei como abrir e fechar o arquivo para escrever já.

Linhas

1 define_filter absolute_minimal_filter ------- todos os
2 define_filter atma_basic_filter -------- ----- none
3 define_filter atma_communication_filter - todas as imagens 4 define_filter atma_health_filter ------------- none
5 define_filter atma_misc_filter --------------- todos os 6 define_filter atma_performance_filter ---- none
7 define_filter atma_supplemental_filter ---- nenhum

    
por user36101 26.02.2010 / 01:12

2 respostas

2

Com uma string bem escolhida no lugar de "temp" (em dois lugares):

sed 's/all/temp/g;s/none/all/g; s/temp/none/g' input_file > output_file

ou sem uma string temporária, se "all" e "none" nunca aparecerem na mesma linha e sempre terminarem a linha:

sed 's/all$/none/;t;s/none$/all/' input_file > output_file
    
por 26.02.2010 / 01:57
3

Apenas por interesse, a solução Perl é bem parecida com a do sed:

perl -pi.bak -e 's/all$/none/ || s/none$/all/' input_file

EDIT: eu perdi o "||" primeira vez. Como declarações separadas, a segunda desfaria a primeira. D'oh!

    
por 26.02.2010 / 12:06