Como substituir este regex com um vazio usando sed

1

Por motivos de desempenho, preciso usar o sed para substituir algum texto em um arquivo e não consigo trabalhar. Esta é a consulta de pesquisa (que funciona em C #) a ser substituída:

<oTimer.*?/>

Primeiro, parece que não consigo escapar corretamente do / estou usando aspas simples com contrabarras duplas, então

<oTimer.*?\/>

E então chego ao problema sobre como substituir isso por uma string vazia.

sed 's/<oTimer.*?\/g>

não parece fazer isso.

    
por Vajura 25.09.2017 / 10:05

3 respostas

1
  • Se <oTimer.*?/> for seu regexp, observe que <oTimer/>something else <anothertag?> também corresponderá. Isso é desejado? Talvez você esteja procurando um analisador html em seu lugar?

  • Tem a certeza sobre o ponto de interrogação? Não tem um significado especial nas expressões regulares básicas, portanto, seu padrão precisa terminar em (incomum) ?/>

  • Você precisa de uma única barra invertida para escapar da barra, mas nesse caso é mais fácil ler usando um delimitador diferente no comando s (você pode escolher um!): s_regex_replacement with /_

  • Se você quiser substituir por uma string vazia, ainda precisará do terceiro delimitador (o segundo e o terceiro envolvem a string substituta, portanto, para um substituto vazio, você tem dois delimitadores sem nada entre eles).

  • No total, suspeito que você esteja procurando por algo como sed 's_<oTimer[^>]*/>__g'

por 25.09.2017 / 10:16
1

Primeiro, sed não suporta quantificador não guloso *? .

Em segundo lugar, você deve alterar o delimitador do operador de substituição:

sed 's~<oTimer[^>]*/>~~g'
    
por 25.09.2017 / 10:14
0

Não use sed para isso, pois não entende a correspondência não-gulosa. Você pode usar perl :

perl -pe 's|<oTimer.*?/>||g' file.in > file.out

Ou para editar o arquivo:

perl -i.bak -pe 's|<oTimer.*?/>||g' file.in
    
por 25.09.2017 / 12:06