grep命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep命令相关的知识,希望对你有一定的参考价值。

1.grep命令

grep命令的名称是来自于全局搜索正则表达式并打印文本行(Global Search Regular Expression and Print out the line)的缩写。


语法如下

grep [options] pattern [file…]


options:表示选项。

pattern:要匹配的模式。

file:表示一系列的文件名。


1.1 选项

  • -i:忽略大小写

  • -q:结果不显示。

  • -c:接数字,列出该文件的第几行。 grep -c ftp.so /usr/local/webserver/php-5.2.4/lib/php.ini

  • -v:反向选择。找出没有关键字的那一行。

  • -h:当搜索多个文件的时候,不显示文件的前缀。

  • -l:只列出含有匹配文件行的文件名,不显示具体内容。

  • -n:显示行号和所有文本行。

  • -s:不显示错误信息。

  • -w:匹配整个单词

  • -x:匹配整个文本行。

  • -r:递归搜索,不仅搜索当前目录,还会搜索各级子目录。

  • -b:打印匹配文本行到文件头的偏移量,以字节为单位。

  • -A:后面跟数字,过滤出符合要求的行以及下面n行。

  • -B:后面跟数字,过滤出符合要求的行以及上面n行。

  • -C:后面跟数字,过滤出符合要求的行以及上和下面n行。

  • -E:支持扩展正则表达式。同egrep

  • -P:支持Perl正则表达式。

  • -F:不支持正则表达式,以字面意思匹配。

  • --color=aoto:关键字加上颜色显示。



2. grep字符集

正则:元字符 正则的特殊符号

符号

意义

例子

^

锚定行的开始

"^grep"就是grep开头的行

$

锚定结尾

"grep$"就是grep结尾的行

.

非换行符的任意一个字符

"gr.p"就可以匹配到"grep,grap"

*

零个或多个前字符

"gr*p"就可以匹配到"grp,grrp,grrrp"

[]

范围内的一个字符

"[Gg]rep"就可以匹配到"Grep,grep"

[^]

取非

"[^a-yA-Z]"就可以匹配到z

\(..\)

标记匹配字符

"\(oo\)"就可以匹配到包含oo的行

\<

锚定单词开始

"\< grep"就可以匹配到grep开头的单词

\>

锚定单词结尾

"grep\>"就可以匹配到grep结尾的单词

x\{m\}

匹配重复字符x,m次

"g\{2\}"匹配连续两个g的行

x\{m,\}

匹配重复字符x,m次或以上

"g\{2,\}"匹配到"gg,gggrep"

x\{m,n\}

品牌重复字符x,m到n次之间

"g\{2,5\}"匹配到2到5次g的行

\w

零个或多个文字和数字[0-9a-zA-Z]

"g\wp"匹配到"grep"

\W

一个或多个非单纯数字字符

如 ", ."等

\b

单词锁定

"\bgrep\b"只匹配grep


  • egrep grep -E字符集

RE字符

意义

例子

+

1个或多个前一个字符

"g+rep" 匹配到"ggrep。gggrep"

?

0个或1个前面的字符

"g?rep"匹配到"grep。ggrep"

|

用或的方式找出字符串

"gr(a

()

找出字符组

"gr(ee){2,5}p"匹配到greeeep,greeeeeep.或(rr)+


3. 范例

3.1 选取

  • 将last有出现root的行取出来。

last |grep 'root'


  • 将last没有出现root的行取出来。

last |grep -v 'root'


  • 将last有出现root的行取出来,只显示第一列。

last |grep 'root' |cut -d ' ' -f 1


3.2查找关键字

  • 找出filename文件中 含有abc的行。

grep  'abc' filename


  • 承上,显示行好,和颜色。

grep -n --color=auto 'abc' filename


  • 承上,把关键字所在行前三行,后两行打印出来。

grep -n --color=auto -A2 -B3 filename


  • 找出不含有abc关键字的行。

grep -vn 'abc' filename


  • 忽略大小写,找出包行abc的行

grep -in 'abc' filename


3.3 利用 [] 来查找关键字

  • 找出 abc aecd的行。

grep -n 'a[be]c' filename


  • 找到不是 bc前面不是a的行。

grep -n [^a]bc' filename


  • 找到bc前面不是小写字符的行。

grep -n [^a-z]bc' filename


  • 找到含有数字的行。

grep -n '[0-9]' filename

grep -n [[:digit:]] filename


3.4 开头与结尾符号^$

  • 找到以a开头的行。

grep -n '^a' filename


  • 找到以小写字母开头的行。

grep '-n ^[a-z]' filename


  • 找到不是以字母开头的行,

grep -n '^[^a-zA-Z]' filename


  • 找到以 . 结尾的行。

grep -n '\.$' filename

. 有特殊含义必须转义成普通字符。


  • 找出空白行。

grep -n '^$' filename


  • 不显示空白行和#开头的行

grep -vn '^$' filename | grep -vn '^#'


3.5 任意一个字符 . 重复字符*

  • 找出g??d的字符串。

grep -n 'g..d' filename


  • 找出至少oo的字符串。

grep -n 'ooo*' filename

*表示0个或多个*前面一个字符。


  • 找出o与o之间任意个任意字符的字符串。

grep -n 'o.*' filename


3.6 使用限定连续RE字符范围{}

  • 找出连续两个o的行。

grep -n 'o\{2\}' filename


  • 找出g后面2-5个o,再接个g的字符串。

grep -n 'go\{2,5\}g' filename


  • 找出2个或以上的o的字符串。

grep -n 'o\{2,\}' filename


以上是关于grep命令的主要内容,如果未能解决你的问题,请参考以下文章

linux命令grep

shell编程之grep命令和egrep命令:行截取命令

小猿圈之Linux使用grep筛选多个条件及grep常用过滤命令

Linux下find命令和grep命令查找文件

shell命令--grep/egrep

grep命令