sed sem regex

0

Estou usando o GNU SED para localizar e substituir a funcionalidade em arquivos grandes (até 2 GB).

Encontrar e substituir caracteres podem conter qualquer caractere, portanto, eu quero localizar e substituir os parâmetros a serem tratados como texto sem formatação.

Eu não quero tratar nem encontrar ou substituir parâmetros como regex pelo comando sed.

Eu tenho experimentado muito, mas toda vez que eu estou recebendo novas combinações de regex que não funciona para sed como texto simples.

Como isso pode ser alcançado?

Existe alguma fórmula para escapar dos caracteres especiais?

Nota: Estou usando o operador ~ como separador de comando em vez de /

Abaixo está o exemplo

sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"

O comando acima não funciona, pois trata o parâmetro find como regex (como é regex). Portanto, para encontrar o texto, eu tenho que escapar de alguns caracteres especiais no regex como abaixo

sed -ne "s~\^\[-+\]?\[0-9\]\*\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"

Em outro exemplo, tenho que modificar .*$ para .\*\$ Mas em (.*$) Eu não quero mofify entrada.

Então existe alguma regra universal para a sequência de escape?

    
por sagar 11.01.2013 / 07:34

1 resposta

1

Q: Is there any formula to escape the special characters?
Q: Is there any universal rule for escape sequence?

A: Você pode usar o código hexadecimal correspondente para caracteres especiais, nos casos em que apenas digita / , . , * , ? , $ etc. fica irritante. Por exemplo:

sed -rn '/\x22/p' file

imprime linhas que contêm aspas duplas, pois \x22 representa " .

Se você precisar procurar códigos hexadecimais, você pode salvar todos eles convenientemente em um arquivo com este comando:

gawk 'BEGIN{for(i=0;i<255;i++){printf("%d\t%x\t%c\n", i,i,i)}}' null >chars.txt
    
por 29.01.2016 / 12:48