grep 转义字符“\” 查找,因为“\”grep 命令里是转义字符,所以需要特殊的处理,
比如要查找#include "..\..\mydir\test.h" 中的"\"
grep "\\\\" test file 其中,前两个“\\” --->\转义本身“\”,后面两个"\\"才是要查找的“\”;
或者
grep \\\\ test file 其中,前两个“\\” --->\转义本身“\”,后面两个"\\"才是要查找的“\”;
或者
grep '\\' test file,其中,前一个是转义符号,后面一个是查找的“\”
测试查找$:
grep '\$' test.sh 实际传入grep的是\$
grep "\\$" test.sh 实际传入grep的是\$
grep \\$ test.sh 实际传入grep的是\$
查找"有效:
grep '"' test.sh 实际传入grep的是"
grep '\"' test.sh 实际传入grep的是\"
grep "\"" test.sh 实际传入grep的是"
查找\有效:
grep "\\\\" test.sh 实际传入grep的是\\
grep '\\' test.sh 实际传入grep的是\\
其他特殊字符的转义
1、Tab匹配
$'\t'
2、空格
转义符+空格
3、括号
转义符+括号
4、精确匹配
\<匹配内容\>(以**开头,以**结尾)
转义的说明:
meta是元语言的意思,即当前命令作用域下的特殊含义字符,包括空格,$,',",\等等,主要是区分为命令meta和shellmeta,而且在不同的命令作用域下meta是不同的。
针对shell命令行作用域下:
无引号将先处理所有shell的meta。
单引号为硬转义,shell的meta在内部应无效。
双引号为软转义,大部分shellmeta无效,但$,\,`不会失效。
下面先给出博主试验后得出的结论:
多层转义原理:在命令中使用引号例如grep时,它的转义有两层,一层是shell本身的mate,这一层可以用echo命令测试输出,经过这一层转义之后的结果会进入grep命令,并在grep中进行第二层的转义,例如当grep利用双引号查找$时要将转义字符作为第二层转义的输入送到grep中,grep实际输入的应该是\$,这样才能查找到文件中的$字符,对于grep来说他的meta我暂时只发现了$和\,$对于grep来说有进行变量转换的内部功能,\在grep内还是转义功能,而"和'并不是grep的meta,因此不需要二层转义,是否需要二层转义应该是根据不同命令的meta决定的。