引入
假如有如下文本:test.txt
\\
\
'
"
$
|
^
使用 grep
命令直接搜索结果如下:
grep '\' test.txt
所以对于一些特殊字符,需要进行转义,用符号 \
来对别的字符进行转义。
查找 \\
# '\' 字符是对 '\' 字符的转义,所以有四个 '\' 字符
grep '\\\\' test.txt
# fgrep 会对特殊字符解释成普通字符
fgrep '\\' test.txt
注:
fgrep
命令会将特殊字符解释成普通字符。
查找 \
grep '^\\$' test.txt
查找 '
# 将单引号包裹在双引号中
grep "'" test.txt
# \ 字符是对 ' 的转义
grep \' test.txt
# 单引号字符 ' 并不属于正则表达式的元字符,所以 fgrep 命令无效
fgrep "'" test.txt
fgrep \' test.txt
查找 ''
# 用一对单引号把一个双引号包起来
grep '"' test.txt
# 用 \ 对双引号进行转义
grep \" test.txt
# 用 \ 对双引号进行转义,尽管也被双引号起来了
grep "\"" test.txt
查找 $
# 用单引号引起来,使用 \ 进行转义
grep '\$' test.txt
# 用双引号引起来,使用 \ 转义 $ 字符,然后还需要一个 \ 转义 \ 本身
grep "\\$" test.txt
# 不需要引号,使用 \ 转义 $ 字符,然后还需要一个 \ 转义 \ 本身
grep \\$ test.txt
# 由于 $ 属于正则表达式的元字符,可以让 fgrep 命令解释其本身含义,无论是否使用引号
fgrep '$' test.txt
# 由于 $ 属于正则表达式的元字符,可以让 fgrep 命令解释其本身含义,无论是否使用引号
fgrep "$" test.txt
# 由于 $ 属于正则表达式的元字符,可以让 fgrep 命令解释其本身含义,无论是否使用引号
fgrep $ test.txt
查找 |
# 用单引号引起来
grep '|' test.txt
# 用双引号引起来
grep "|" test.txt
# 因为 | 属于管道符在 Linux 中,所以如果不加引号,需要使用 \ 进行转义
grep \| test.txt
# 使用 fgrep 命令也可以直接搜索,但需要加引号
fgrep "|" test.txt
# 使用 fgrep 命令也可以直接搜索,但需要加引号
fgrep '|' test.txt
查找 ^
# 由于 ^ 属于正则表达式的元字符,所以使用 grep 命令搜索时需要进行转义,用引号引起来
grep "\^" test.txt
# 由于 ^ 属于正则表达式的元字符,所以使用 grep 命令搜索时需要进行转义,但没有加引号,所以需要再加一个 \ 字符转义它本身 \
grep \\^ test.txt
# 由于 ^ 属于正则表达式的元字符,所以使用 grep 命令搜索时需要进行转义,用引号引起来
grep '\^' test.txt
# 由于 ^ 属于正则表达式的元字符,可以让 fgrep 命令解释其本身含义,无论是否使用引号
fgrep ^ test.txt
# 由于 ^ 属于正则表达式的元字符,可以让 fgrep 命令解释其本身含义,无论是否使用引号
fgrep '^' test.txt
# 由于 ^ 属于正则表达式的元字符,可以让 fgrep 命令解释其本身含义,无论是否使用引号
fgrep "^" test.txt
总结
- 对于属于正则表达式元字符的字符,推荐使用
fgrep
命令,它会解释成字符本身的含义。 - 对于查找引号,如果是单引号,则用双引号包起来查找;如果是双引号,则用单引号包起来查找。
- 对于不属于正则表达式元字符的字符,可以使用单引号或者双引号包起来查找,也可以不使用引号然后使用
\
进行转义然后查找。
注:关于
grep
可参考:Linux命令之查找字符串grep;关于fgrep
可参考:Linux命令之查找文件中符合条件的字符串fgrep。