grep 命令详解及相关事例

一.匹配字符

.    匹配任意单个字符

[ ]  匹配指定范围内的任意字符

[^]  匹配飞指定范围内的任意字符

[:alpha:] 字母字符

[:lower:] 小写字母字符

[:upper:] 大写字母字符

[:digit:] 数字

[:alnum:] 字母数字字符

[:space:] 空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符

[:punct:] 标点字符

[:cntrl:] 控制字符(禁止打印)

[:print:] 可打印字符

使用时一般使用两个中括号,具体会在下面的例子中使用。

二.匹配次数

*      匹配前面的字符任一次

.*     匹配任意长度的任意字符(注意贪婪模式,比如  grep  “r.*t” /etc/passwd  )

x\{m,n\}   指定前面的字符至少出现m次,至多出现N次。

x\{m,\}    指定前面的字符至少出现m次

x\{0,n\}   指定前面的字符至多出现N次

x\{m\}     精确匹配m次

?         匹配其前面的字符0或1次

三.锚定符

1.^  锚定行首     grep  "^r..t"  /etc/passwd

2.$  锚定行尾     grep  "h$"  /etc/passwd

3.^$ 锚定空白行   grep  "^$"  /etc/passwd

4.\< (\b)   锚定词首     grep  "\<r..t"  /etc/passwd

5.\> (\b)   锚定词首     grep  "r..t\>"  /etc/passwd

示例(容易混淆):

至少包含一个空白字符           grep  "[[:space:]]\{1,\}"   /etc/passwd

至少包含一个非空白字符         grep  "[^[:space:]]\{1,\}"   /etc/passwd

没有一个空白字符               grep  -v "[^[:space:]]\{1,\}"   /etc/passwd

6.\(\)对字符分组   grep  "\(l..e\).*\1r"

示例:

grep --color "l\([13]\):\1:.*:\1"   /etc/inittab

四.选项

-v    对结果取反

-i    忽略字母大小写

-o    仅显示匹配到的字符串(行的其他内容不显示)

-E    支持扩展的正则表达式

-A n    显示匹配到的行下面n行

-B n    显示匹配到的行上面n行

-C n    显示匹配到的行上下面各显示n行

练习:

1.查找系统中user1用户的相关信息。(提前建好user11,myuser1)(易错)

grep "user1"  /etc/passwd    所有包含user1的行

grep "\<user1\>"  /etc/passwd     表面可以,但是添加以下用户,就不可以了

useradd   -c  "user1‘s  uncle"  /etc/passwd   -c  是注释

grep "^\<user1\>"  /etc/passwd    成功匹配

2.查找系统中以user开头后面跟了数字的用户的相关信息。

grep "^user[0-9]\{1,\}\>"  /etc/passwd

3.分析/etc/inittab 文件如下两行文本的特征,编写可以精确查到的类似两行的模式,

要求每行的数字必须相同。

l1:1:wait:/etc/rc.d/rc 1

l3:3:wait:/etc/rc.d/rc 3

grep "l\([13]\):\1:.*:.* \1"  inittab

扩展:匹配所有上述特征:grep "l\([0-9]\):\1:.*:.* \1"  inittab

如果超过10,需要添加最小匹配:grep "l\([0-9]\{1,\}\):\1:.*:.* \1"  inittab

4.显示/proc/meminfo文件中以不区分大小写的s开头的行

grep "^[sS]" /proc/meminfo

5.显示/etc/passwd中以nologin结尾的行

grep "nologin$" /etc/passwd

6.显示/etc/inittab中以#开头,且后面跟一个或者多个空白字符,而后又跟了任意非空白字符的行

grep "^#[[:space:]]\{1,\}[^[:space:]]"  /etc/inittab

7.显示/etc/inittab中包含了两个冒号中间一个数字的行

grep ":[0-9]:" /etc/inittab

8.显示/boot/grub/grub.conf 文件中以一个或者多个空白字符的行

grep ":[0-9]:" /etc/inittab

9.显示/etc/inittab文件中以一个数字开头并以一个开头数字相同的数字结尾的行。

grep "^\([0-9]\).*\1$"  /etc/inittab

10.显示/etc/inittab文件中非空白的行

grep -v  "^$"  /etc/inittab

11.取出当前网络接口的相关IP地址(不包含127.0.0.1)

ifconfig |grep "inet addr" |grep -v "127.0.0.1"| cut -d: -f2|cut -d" " -f1

ifconfig |grep -A 1 "eth" |grep -o "addr:[0-9.]\{1,\}"|cut -d: -f2

五.扩展正则表达式

与正则表达式不同之处:

\(\)替换为 ()

\{\}替换为 {}

+  次数匹配,匹配其前的额字符一次或者多次

|  或者

示例:

匹配ifconfig结果中出现数字为1-255之间的整数

ifconfig|grep --color -E "\<([1-9]|[1-9][0-9]|1[1-9][0-9]|2[0-5][0-5])\>"

grep 命令详解及相关事例,布布扣,bubuko.com

时间: 2024-10-08 09:48:29

grep 命令详解及相关事例的相关文章

grep命令详解

grep命令是linux下的行过滤工具,其参数繁多,下面就一一介绍个个参数的作用,希望对大家有所帮助.grep -- print lines matching a pattern (将符合样式的该行列出)◎语法: grep [options] PATTERN [FILE...] grep用以在file内文中比对相对应的部分,或是当没有指定档案时, 由标准输入中去比对. 在预设的情况下,grep会将符合样式的那一行列出.此外,还有两个程序是grep的变化型,egrep及fgrep. 其中egrep

linux grep命令详解

linux grep命令详解 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟gr

文本处理工具之一grep命令详解

grep(Globel Search Regular Expression and Printing out the line)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep.fgrep是fast grep,不支持元字符,但是搜索速度更快.

Linux三剑客之grep命令详解

先来小菜一碟: cat /etc/passwd | grep -c "/bin/bash$" 以上,用来统计/etc/passwd 文件中以/bin/bash结尾的用户个数. grep用来基于正则去实现行过滤的工具:它有很多衍生命令: egrep 扩展的grep,即默认使用扩展正则表达式的grep,更高级. fgrep 专用于文件行过滤的工具. grep命令格式:grep [option] pattern file        option表示选项,pattern 表示要匹配的模式,

shell --- grep 命令详解

一.grep  ---- "行过滤工具" grep ( global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 )是一种强大的文本搜索工具,它能使用正则表达式搜索文本,查找包含某些字符串的行或符合某个模式(Pattern)的一类字符串的行,并把匹配的行打印出来.   grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则

【转】grep命令详解

原文链接  http://bbs.chinaunix.net/thread-1810167-1-1.html grep命令是linux下的行过滤工具,其参数繁多,下面就一一介绍个个参数的作用,希望对大家有所帮助. grep -- print lines matching a pattern (将符合样式的该行列出) ◎语法: grep [options] PATTERN [FILE...] grep用以在file内文中比对相对应的部分,或是当没有指定档案时, 由标准输入中去比对. 在预设的情况下

Linux入门基础之grep命令详解及正则表达式

grep命令是linux下经常使用的命令之一,能根据用户指定的模式(pattern)对文本进行过滤,显示出匹配到的行.其命令格式为: grep [OPTIONS] PATTERN [FILE] 例如:我们要查找网卡0中配置的IP地址(该文件路径: /etc/sysconfig/network-scripts/ifcfg-eth0)---grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-eth0 (注:alias grep='grep --col

Linux的grep命令详解

简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟grep有很小不同.egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也

Shell编程之---grep命令详解

grep 一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来 grep [option]  [mode]  [file] -c       #只输出匹配行的数量 -i       #搜索时忽略大小写 -h       #查询多文件时不显示文件名 -l       #只列出符合匹配的文件名,而不列出具体的匹配行 -n   #列出所有的匹配行,并显示行号 -s   #不显示不存在或无匹配文本的错误信息 -v   #显示不包含匹配文本的所有行 -w   #匹配整词 -x   #匹