Combinando caracteres especiais com Expressão Regular

10

Digamos que seja muito fácil se eu quiser encontrar algo contendo letras minúsculas e números com

produce_text | grep -E '[0-9a-z]'

Os colchetes são úteis para combinar um conjunto de caracteres, mas e os que são um pouco especiais?
Se eu quiser, usando parênteses, combine qualquer caractere mas um destes: um colchete de fechamento ] , um traço (ou hífen) "-", ambos barras / e \ , um sinal de intercalação ^ , um dois pontos : .
Será que vai ficar assim (eu sei que isso não funciona)?

[^]-/\^:]
    
por iBug 04.02.2017 / 16:07

2 respostas

11

Para corresponder um literal ] e um literal - em um Suporte Expressão você terá que usá-los assim:

[^]/\^:-]

ou, melhor ainda, desde alguns ferramentas exigem que a barra invertida seja ignorada :

[^]/\^:-]

isto é, O colchete à direita (']') perderá seu significado especial e se representará em uma expressão de colchetes se ocorrer primeiro na lista (após uma inicial '^', se any)
e
O caracter hífen-menos será tratado como tal se ocorrer primeiro (depois de um inicial '^', se houver) ou por último na lista
consequentemente, Se uma expressão de colchetes especificar tanto '-' quanto ']', o ']' deve ser colocado primeiro (após o '^', se houver) e o '-' último dentro da expressão de colchetes.
As regras para expressões de colchetes são as mesmas para ERE e BRE .

    
por 04.02.2017 / 16:32
7

Estranhamente, talvez você precise ter alguns personagens em lugares específicos. Você deve ter ] como o primeiro caractere em um conjunto e - deve ser o último caractere em um conjunto.

Aqui está um repositório de anúncios que atende aos seus requisitos: [^]\^/-] :

echo 'Hello[world]-[sun] ^^ 4/5 or 3' | grep -Eo '[^]\^/-]' | xargs
H e l l o [ w o r l d [ s u n 4 5 o r 3 4
    
por 04.02.2017 / 16:27