Sed para localizar e substituir a expressão regular

1

Eu tenho um arquivo que preciso substituir todas as correspondências abaixo:

,"   "\n  to  ,"ZYY"\n
,"ZZY"\n  to  ,"ZYY"\n
,"GMZ"\n  to  ,"FPZ"\n

Estou tentando usar o comando: sed 's/," "/,"ZYY"/g' Packs.txt , mas não está funcionando.

    
por Pedro Lopes 22.10.2018 / 18:40

3 respostas

2

Se você tiver uma coleção de conversões que precisa fazer, poderá colocá-las em um arquivo. Você pode então usar o "-f _sed_file_" para processar todos eles. Por exemplo, se você inserir o arquivo é algo como este arquivo test.in:

This,"   ",is,a,test
This,too,"ZZY",is,a,test
And,so,"GMZ",is,this

E você tem o seguinte arquivo sed:

s/,"   "/,"ZYY"/g
s/,"ZZY"/,"ZYY"/g
s/,"GMZ"/,"FPZ"/g

Você pode executar o seguinte comando:

sed -f test.sed test.in

Para obter a seguinte saída:

This,"ZYY",is,a,test
This,too,"ZYY",is,a,test
And,so,"FPZ",is,this

Espero que isso ajude.

    
por 22.10.2018 / 19:17
2

Isso parece fazer o truque:

$ sed -E 's/,"(   |ZZY)"$/,"ZYY"/;s/,"GMZ"$/,"FPZ"/' inputfile

O principal aqui é usar a $ anchor para marcar o final da linha, em vez de procurar por \n .

    
por 22.10.2018 / 20:33
0

Isso mudará todas as três strings para o que você deseja e enviará somente as alterações para a saída padrão:

 sed -e 's|,"   "\n|,"ZYY"\n|g' -e 's|,"ZZY"\n|,"ZYY"\n|g' -e 's|,"GMZ"\n|,"FPZ"\n|g' Packs.txt

Eu usei as strings inteiras e não apenas as letras entre aspas duplas, pois você não especificou se essas strings específicas aparecem em qualquer outro lugar no arquivo.

Quando estiver satisfeito com o resultado, você pode usar o comando abaixo para alterar o arquivo em si.

sed -i -e 's|,"   "\n|,"ZYY"\n|g' -e 's|,"ZZY"\n|,"ZYY"\n|g' -e 's|,"GMZ"\n|,"FPZ"\n|g' Packs.txt
    
por 22.10.2018 / 19:14

Tags