Por que estou recebendo o erro “missing terminating] para a classe de caracteres?

3

Eu quero cortar uma string com colchetes usando sed .

Como evitar um erro se eu quiser soltar uma string com [ ? Por exemplo:

$ echo '[Om/mystring' | grep -oP '(?<=[Om\)\w+'
grep: missing terminating ] for character class
    
por Josef Klimuk 22.02.2018 / 15:43

2 respostas

7

Como o erro falta de terminação] para a classe de caracteres já diz, o problema aqui tem a ver com [ , que você precisa escapar. Caso contrário, é entendido como uma classe de caracteres pelo grep.

Além disso, você está dizendo // , enquanto deseja usar / em vez de \ de acordo com sua entrada.

Todos juntos, isso imprime um conjunto de palavras depois de [Om/ :

$ echo '[Om/mystring' | \grep -oP '(?<=\[Om\/)\w+'
mystring
    
por fedorqui 22.02.2018 / 15:47
6

Você está recebendo o erro porque [ é um caractere especial na sintaxe da expressão regular, introduzindo uma classe de caracteres . Para ser tratado como um literal de string, ele deve ter escape, ou seja, \[

Se você quiser apenas remover o prefixo [Om/ , será mais simples sed usar um delimitador que não apareça no padrão:

$ echo '[Om/mystring' | sed 's;\[Om/;;'
mystring
    
por steeldriver 22.02.2018 / 15:59