grep(全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来。它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,请注意grep在数据中查找一个字符串时,是以“整行”为单位进行数据筛选的。

egrep 命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。

fgrep 命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令搜索字符串的速度很快。

注:

 grep只支持基本正则表达式

 egrep只支持扩展正则表达式

 fgrep不支持正则表达式,搜索字符串的速度快

一、grep命令格式及常用选项

  命令格式:grep [options] "pattern" Files

      [options]参数

      --color 匹配到的字符用高亮颜色显示出来

      -v      反向选取匹配到的内容

      -o      只显示被模式匹配到的内容

      -r      搜索多个文件时,以递归搜索

      -i      不区分字符大小写

      -A n    显示匹配到的行时,且显示其后面的n行

      -B n    显示匹配到的行时,且显示其前面的n行

      -C n    显示匹配到的行时,且显示其前面和后面的n行

      -E      使用扩展的正则表达式,等同于"egrep"命令

      pattern:匹配查找文件内容的模式

      grep后面加上 --color=auto 表示高亮显示符合条件字符,即将符合条件字符加上颜色显示。

   正则表达式(分为基本正则表达式与扩展正则表达式)

   基本正则表达式(工作在贪婪模式,尽可能长的匹配符合模式的内容)

   元字符:

   .:    匹配任意单个字符;                                  如: grep "A.J"

   ^:    锚定行首符合条件的内容;                            如:grep "^root"

   $:    锚定行尾符合条件的内容;                            如:grep "root$"

   *:    匹配紧挨在其前面的字符任意次;                      如:grep "a*b"

   .*:   匹配任意长度字符任意次;                            如:grep "r.*t"

   []:   匹配指定范围内的任意单个字符;

       [0-9]:所有的数字

       [a-z]:所有的小写字母

       [A-Z]:所有的大写字母

       [a-zA-Z]:所有的字母

       [0-9a-zA-Z]:所有的数字和字母                          如:grep "[0-9]"

   亦可用如下单词替代相对应选项

       [:digit:] 数字                     等同于”0-9”

       [:lower:] 小写字母             等同于”a-z”

       [:upper:] 大写字母            等同于”A-Z”

       [:punct:] 标点符号

       [:space:] 空白字符

       [:alpha:] 所有字母            等同于”a-zA-Z”

       [:alnum:] 所有数字或字母    等同于”a-zA-Z0-9”

   [^]:  匹配指定范围外的任意单个字符;                     如:grep "[^0-9]"

   \?:   匹配紧挨在其前面的字符0次或1次;                  如:grep "a\?b"

   \{0,n\}:匹配其前面的字符0次到n次;                        如:grep "[0-9]\{1,2\}"

   \{m,\}: 匹配其前面的字符至少m次;                         如:grep "[0-9]\{1,\}"

   \{m,n\}:匹配其前面的字符至少m次,最多n次;                如:grep "[0-9]\{1,2\}"

   \<:锚定词首;用法格式“\<pattern”

   \>:锚定词尾;用法格式“pattern\>锚定词首词尾必须一起使用  如:grep "\<[0-9]\{1,2\}\>"

   \(\):分组匹配;                                           如:grep "\(.n\).*\1"

扩展正则表达式(egrep、grep -E) 注:在基本正则表达式基础上支持这些元字符

    元字符:

      ?:    匹配紧挨在其前面的字符0次或1次;用法格式”a?b”

      {m,n}:匹配其前面的字符至少m次,最多n次;用法格式“a{1,3}b”

      {m}:  精确匹配m次;用法格式“a{2}b”

      ():   分组匹配;用法格式“(a.b).*\1”

      |:    或者;用法格式”a|b”

                  如:grep -E "Failed password|FAILED LOGIN" /var/log/secure

      +:    匹配其前面的字符至少1次;用法格式“a+b”

I/O 重定向、管道

   程序分为输入、输出即I/O,将默认数据流改为其它设备,就称作IO重定向.

       标准输入fd: 0

       标准输出fd: 1

       错误输出fd: 2

   如上:标准输入用0表示、标准输出用1表示、错误输出用2表示

<  表示输入重定向

   COMMAND < /from/somewhere

   如: cat < /etc/passwd 表示将指定文件内容输入至cat命令显示于屏幕上

<< 表示此处创建文档,通常用于脚本中生成文档,向用户输出大段信息

   cat > /path/to/somefile << EOF

   Hello everyone

   I am is Newusers

   This is my writes

   Thankyou watch    

   EOF

grep正则表达式 & egrep扩展正则表达式 & fgrep & I/O 重定向_I/O重定向

如右图: 大写EOF表示文件结束符,两个EOF中间内容为文件显示内容,cat表示将内容输出至指定文件

>  表示覆盖输出重定向,此输出会覆盖文件原有内容

>| 表示强制覆盖,除非使用者十分明确自己所做事情,否则慎用

>> 表示追加输出重定向,些输出会在文件原有内容中继续添加,不覆盖

/null表示输出为空,即输出文件不存在。不同于空白文件

set -C 禁止对已经存在的文件使用覆盖重定向

set +C 关闭上述功能

同时重定标准输出和错误输出:

COMMAND > /path/to/stdout  2> /path/to/error

如:cat /etc/passwd > /tmp/Joan.txt 2> /tmp/ooan.txt

标准输出和错误输出定向至一个文件:

&>

&>> 与&>同意,无实际意义

COMMAND &> /path/to/somewhere       表示将标准输出到指定文件

COMMAND > /path/to/somewhere 2>&1   表示将标准输出、错误输出同时输出到指定文件

   以上部分内容出自网络,经本人理解重新编写。有不妥之处还请大家指教,谢谢!