Eu sei que podemos escapar de um caractere especial como *(){}$
com \
para ser considerado literal.
Por exemplo \*
ou\$
Mas no caso de .
eu ter que fazê-lo duas vezes, \\.
caso contrário, é considerado caráter especial. Exemplo:
man gcc | grep \\.
Por que é tão?
shell-script
grep
regular-expression
quoting
escape-characters
Usuário Registrado
fonte
fonte
man bash|grep \\.
poderia ser um exemplo.man gcc | grep '\.'
.Respostas:
Geralmente, você só precisa escapar uma vez para tornar o caractere especial considerado literal. Às vezes, você precisa fazer isso duas vezes, porque seu padrão é usado por mais de um programa.
Vamos discutir seu exemplo:
Este comando é interpretado por dois programas,
bash
intérprete egrep
. A primeira causa de escapebash
sabe\
é literal, então a segunda é aprovadagrep
.Se você escapar apenas uma vez,
\.
,bash
saberá que este ponto é literal, e passar.
paragrep
. Quandogrep
vê isso.
, ele acha que o ponto é um caractere especial, não literal.
Se você escapar duas vezes,
bash
passará o padrão\.
paragrep
. Agoragrep
saiba que é um ponto literal.fonte
grep \\. my_file
. A linha de comando é interpretada pelo shell, usando o primeiro\
para escapar do segundo, para que um\
seja passado literalmente para grep. O ponto.
não é especial para o shell, portanto é transmitido literalmente de qualquer maneira. O Grep então lê o (single)\
e o usa para escapar do ponto.
.echo .
na festança apenas ... ecoa o.
caráter de Bach .