Duas regras simples:
- Uma barra invertida
\C
escapa do próximo caractere, qualquer que seja, além de uma nova linha.
- Aspas simples
'text'
escapam de qualquer caractere entre elas, incluindo uma barra invertida, mas não incluindo uma aspa simples (já que marca o final do texto entre aspas).
Assim:
grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile
Se você precisar passar um argumento que contenha aspas simples, use '\''
para "escapar" uma aspa simples entre aspas simples. Tecnicamente, o que isso faz é terminar o primeiro texto literal, em seguida, colocar um literal '
na mesma palavra, depois mais texto literal ainda na mesma palavra.
grep '^D'\''oh!' myfile
O restante das regras de cotação (resumidas):
- É preciso citar os seguintes caracteres pelo menos algumas vezes: espaço em branco e
!"#$&'()*;<>?[\]^'{|}~
(em outras palavras, os seguintes caracteres são seguros: letras, dígitos, %+,-./:=@_
e caracteres não-ASCII).
- Entre aspas duplas, todos os caracteres são usados literalmente, exceto
"$\'
e (em shells com histórico ativado) !
. Uma barra invertida entre aspas duplas aparecerá na string, a menos que preceda um dos caracteres não literais.
Essas regras são para bash e outras shells no estilo Bourne (como ash e ksh). Eles se aplicam também ao zsh (exceto que =
após o espaço em branco pode precisar de citação). As regras em csh / tcsh e em Fish são diferentes.