grep "[]:/?#@\!\$&'()*+,;=%[]"
Dentro de uma expressão entre colchetes, [...]
, muito poucos caracteres são "especiais" (apenas um subconjunto muito pequeno, como ]
, -
e ^
, e as três combinações [=
, [:
e [.
). Ao incluir ]
em [...]
, o ]
deve vir primeiro (possivelmente após um ^
). Optei por colocar o ]
primeiro e o [
por simetria.
A única outra coisa a lembrar é que uma única string entre aspas não pode incluir uma aspa simples, então usamos aspas duplas em torno da expressão. Como usamos uma string com aspas duplas, o shell vai procurar coisas para expandir. Por esse motivo, escapamos do $
as \$
, o que fará com que o shell forneça um literal $
para grep
, e escapamos de !
as \!
, já que é uma expansão de histórico em bash
(somente em bash
shells interativos).
Você gostaria de incluir uma barra invertida no conjunto, você teria que escapar como \
para que o shell forneça uma única barra invertida para grep
. Além disso, se você quiser incluir um backtick '
, ele também deve ser escapado como \'
, já que inicia uma substituição de comando.
O comando acima iria extrair qualquer linha que contivesse pelo menos um dos caracteres na expressão entre colchetes.
Usando uma única string entre aspas em vez de uma string entre aspas duplas, que contorna a maioria dos incômodos com os caracteres que o shell interpreta:
grep '[]:/?#@!$&'"'"'()*+,;=%[]'
Aqui, a única coisa a lembrar, além da colocação do ]
, é que uma única string entre aspas não pode incluir uma aspa simples, então usamos uma concatenação de três strings:
-
'[]:/?#@!$&'
-
"'"
-
'()*+,;=%[]'