grep ========== grep(Global search Regular Expression and Print out the line)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 语法格式:: grep [option...] [pattern] [file...] .. note:: pattern 中包含正则或者空格等符号时,需要使用引号:'pattern' 或 "pattern"。 常用参数 -------------- -c 统计匹配的行数 -o 只打印匹配上的内容,而不是整行;如果一行有多个匹配,则会打印成多行 -i 不区分大小写 -n 显示匹配内容的行号 -r 递归查找目录 -v 反向选择,即打印未匹配上的行 -l 列出文件内容匹配上 pattern 的文件名 -E 扩展 grep,可以使用扩展正则表达式 -V 显示版本信息 -P, --perl-regexp 使用兼容 perl 的正则表达式,与 ``-E`` 冲突 --color 匹配到的关键词显示颜色,默认为 ``auto`` --include=file_pattern 只查找匹配 file_pattern 的文件 --exclude=file_pattern 跳过匹配 file_pattern 的文件和目录 .. note:: ``grep -E`` 相当于使用 ``egrep`` 。 ``--color`` 选项可能导致输出到控制台的内容为空,但是如果重定向到文件,文件内容不为空。 如果要匹配非打印字符(比如 ``\t`` ),可以使用 ``grep -P`` ,在 Bash 里面也可以借助 ``$`` (比如 ``grep $'\tabc\t'``)。 grep 拿到的是 ``$`` 解析之后的结果, ``$`` 还会将输入的 Unicode 码翻译成对应的符号。 基本正则字符 -------------- grep 只能使用基本正则字符。 .. table:: 部分常用基本正则字符 :align: center ========================== ======================================= 字符 含义 ========================== ======================================= . 匹配一个非换行符的字符 \* 匹配零个或多个先前字符 ^ 匹配行的开始 $ 匹配行的结束 [...] 匹配一个指定范围内的字符 [^...] 匹配一个不在指定范围内的字符 \\< 匹配单词的开始 \\> 匹配单词的结束 \\w 匹配字母、数字、下划线 [[:digit:]] 匹配数字 [[:alpha:]] 匹配大小写字母 [[:alnum:]] 匹配大小写字母及数字 [[:lower:]] 匹配小写字母 [[:upper:]] 匹配大写字母 ========================== ======================================= 基本正则表达式和扩展正则表达式的区别: - 在基本正则表达式中, ``?`` ``+`` ``{`` ``}`` ``|`` ``(`` ``)`` 只是表示普通字符,除非加上转义符 ``\`` 。比如, ``\{3,6\}`` 可以表示匹配个数区间。 - 在基本正则表达式中,如果 ``^`` 不是出现在 pattern 开头,也不是紧接 ``\(`` 或 ``\|`` 之后,那么它只表示一个普通字符。 - 在基本正则表达式中,如果 ``$`` 不是出现在 pattern 结尾,也不是紧靠 ``\)`` 或 ``\|`` 之前,那么它只表示一个普通字符。 - 在基本正则表达式中,如果 ``*`` 出现在 pattern 开头,或者紧接 ``\(`` 、 ``^`` 或 ``\|`` 之后,那么它只表示一个普通字符。 .. note:: ``[[:lower:]ABC]`` 可以匹配所有的小写字母以及大写字母A、B、C。 参考资料 --------------- 1. GNU Grep 3.8 https://www.gnu.org/software/grep/manual/grep.html 2. grep正则表达式 https://blog.csdn.net/hdyebd/article/details/83096612