你的位置:首页 > 操作系统

[操作系统]grep


Grep(Global search REgular expression and Print out the line)搜索以 FILE 命名的文件输入,或者是标准输入,寻找含有与给定的模式 PATTERN 相匹配的内容的行,默认情况下, grep 将把含有匹配内容的行打印出来。

Grep有两种变种程序,egrep和 fgrep,egrep就相当于 grep -E,fgrep则相当于grep -F

Synopsis

grep [optionsPATTERN [FILE...] 
grep [options] [-e PATTERN | -f FILE] [FILE...]

选项 Options

  • -A num 打印出紧随匹配的行下文的num行,在相邻的匹配组之间用--分割
  • -B num 打印出匹配行的上文的num行,在相邻的匹配组之间用--分割
  • -C num 打印出匹配行的上文和下文各num行,在相邻的匹配组之间用--分割
  • -b     在输出匹配的行前面打印出当前行在输入文件中的字节偏移量
  • -c    只会打印出匹配行的总数,与-v联用,为不匹配行的总数
  • --color=[color]  匹配周围的颜色标记,color可以是always,nerver,auto
  • -E    扩展的正则表达式
  • -F    将模式PATTERN视为一个固定的字符串的列表,用新行分隔,只要匹配其中之一即可
  • -P    将模式PATTERN视为一个Perl正则表达式
  • -G    将模式PATTERN视为一个基本的这则表达式,这是默认的
  • -f file   从文件file中获取模式,每行算一个模式,空文件0个模式
  • -H    为每个匹配行打印文件名
  • -h    当搜索多个文件的时候,禁止在输出行前面加上文件名
  • -i    忽略模式PATTERN和输入文件中的大小写的分别
  • -L    禁止通常的匹配输出,它会输出每个不会产生输出的输入文件的名字,它在对文件进行扫描时在遇到第一个匹配时停止
  • -I    禁止通常的匹配输出,他只会输出每个会产生输出的输入文件的名字,它在对文件进行扫描时在遇到第一个匹配时停止
  • -m num 在找到num个匹配行之后,不在读这个这个文件。如果输入是来自一个普通文件的标准输入,并且已经输出了 num个匹配的行, grep 保证标准输入被定位于退出时的最后一次匹配的行之后,不管是否指定了要输出紧随的下文的行。这样可以使一个调用程序恢复搜索。当 grep 在 num个匹配的行之后停止,它会输出任何紧随的下文的行。当使用了 -c 或 --count 选项的时候, grep不会输出比 NUM 更多的行。当指定了 -v 或 --invert-match 选项的时候, grep 会在输出NUM 个不匹配的行之后停止。
  • -n    在输出的每行前面加上它所在文件中的行号
  • -o    只显示匹配行中与PATTERN相匹配的部分
  • -q    安静,不输出任何东西,如果找到任何匹配的内容就会立即意以状态值0退出
  • -R,-r   递归读取目录下的所有文件
  • --include=PATTERN  仅仅在搜索匹配PATTERN的文件时在目录中递归搜索
  • --exclude=PATTERN  在目录中递归搜素,但是跳过匹配PATTERN的文件
  • -V    打印grep版本号
  • -v    取反,只选择不匹配的行

基本正则表达式的元字符

  • 字符串匹配 

    .------------- 匹配任意单个字符
            []------------- 匹配指定范围内的任意单个字符
            [^]------------- 匹配指定范围内的任意单个字符

            [:lower:]------------- 所有小写字母

            [:upper:]------------- 所有大写字母

            [:alpha:]------------- 所有字母

            [:alnum:]------------- 所有数字和字母

            [:digit:]------------- 所有数字

            [:space:]------------- 所有空白字符

            [:punct:]------------- 所有标点符号

  • 次数匹配

    *------------- 任意次    

            \?------------- 0或1次

            \+------------- 1或多次;
            \{m\}------------- 精确限制为m次
            \{m,n\}------------- 至少m次,至多n次,[m,n]
            \{0,n\}------------- 至多n次
            \{m,\}------------- 至少m次

  • 位置锚定

     ^------------- 行首锚定,用于模式的最左侧
           $------------- 行尾锚定,用于模式的最右侧
           \<或者\b------------- 词首锚定,用于表示单词的模式的左侧
           \>或者\b------------- 词尾锚定,用于表示单词的模式的右侧
           ^$------------- 空白行

  • 分组

    ()

    |

Fgrep

就是把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。

Egrep

egrep改良了许多传统 grep 不能或不便的操作,如:
grep 中的?和+要写成\?,\+, 但 egrep 不用
grep 不支持a|b或 (abc|xyz) , 但 egrep 则可以
grep 在处理次数匹配x{n,m} 时, 要用 \{ 与 \} 处理,egrep 则不用
。。。只知道这么多了,欢迎补充!