文本查找工具grep及正则表达式的使用
2012-02-21 08:57
435 查看
一、文本查找工具grep
grep 根据指定模式搜索文档并将符合文档的字符串行显示出来。
正则表达式(regular expression)简写为 regex :是由元字符组合的式子,可当做pattern(模式) 使用,以匹配符合指定特征的字符串。
正则表达式分为基本正则表达式,用字母b表示 和扩展正则表达式,用字母e表示(可以查看帮助手册 man 7 regex)
1.元字符:
<1> ^pattern :行首锚定符,查找的字符串在行首
例如:grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
<2> pattern $ :行尾锚定符
<3> \<pattern :词首锚定符
<4> parttern\> :词尾锚定符
<5> . : 匹配任意单个字符(除了换行符)
<6> * :匹配此前的字符0到任意次(出现的次数)
<7> .* :匹配任意长度的任意字符,
<8> ? :匹配此前的字符0次或者1次
<9> \{m,n\} :匹配此前字符最少m次,最多n次
例如:\{5\} :精确匹配5次
\{5,\} :匹配最多5次
<10> [ ] :匹配指定范围内的任意单个字符
<11> [^ ] :匹配之地范围之外的任意单个字符
<12> [:space:] /[:alpha:]/[:lower:]……. :匹配空格、字母、小写字母等字符
<13> \(\) :引用此前出现的字符,也可以用来分组
2.grep 命令选项
-v 对查找的内容取反
-i 忽略大小写
-r 递归搜索指定的路径
-B # 将对应信息之前的# 行也显示出来
-A # 将对应信息之后的# 行也显示出来
-C # 将对因信息之前和之后的# 行都显示出来
-o 只显示被模式匹配到的字符串本身,而非字符串所在的行
-E 是扩展正则表达式
这里要声明一下扩展正则表达式的某些用法与基本正则表达式的用法是有区别的:
基本正则表达式: 扩展正则表达式:
\{m,n\} 相当于 {m,n}
\( \ ) 相当于 ( )
a|b 表示或者的意思
+ 表示一次匹配1次或者任意次
3.管道的使用: 用“ |“ 表示
管道的用法就是:把前一个命令的输出当做后一个命令的输入
例如:ls -l /etc | more
一个关于正则表达式和管道用法的使用范例:
1。查找如下字符串中形如xxx.xxx.xxx.xxx.的字符串,其中X必须是数字
abc.111.222.333.
12a.333.444.567
11.222.333.444
111.2.333.333
444.444.222.111
33.325.566.6
123.321.123.333
1.2.3.4
12.3.4.5
其中上面这些内容保存在a 文件中
<1>grep --color=auto "[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}" a 444.444.222.111
或者grep --color=auto "\([0-9]\{3\}\.\)\{3\}[0-9]\{3\}" a
444.444.222.111
<2>grep --color=auto -E "([0-9]{3}\.){3}[0-9]{3}" a
444.444.222.111
<3>grep --color=auto -E "([0-9]{1,3}\.){3}[0-9]{1,3}" a
11.222.333.444
111.2.333.333
444.444.222.111
33.325.566.6
<4>grep --color=auto -E "(([0-9]|[0-9]{2}|[0-9]{3})\.){3}([0-9]|[0-9]{2}|[0-9]{3})" a
123.321.123.333
1.2.3.4
12.3.4.5
2.查看当前系统上名字为user1的用户的账号的相关信息。
grep --color=auto "^user1\>" /etc/passwd
3.查找当前系统上以其为附加组的用户超过两个的组的相关信息()
grep --color=auto "[^:]^:[^:]^:[^:]^:[[:alnum:]]\{1,\},.*" /etc/group
4.查找当前系统上其用户账号密码最常使用期限为99999天的用户账户的相关信息
grep --color=auto "[^:]*:[^:]*:[^:]*:[^:]*:99999:" /etc/shadow
5.分析/etc/inittab文件中如下两行的文本特征,请写出可以精确找到类似两行的模式,而且要让数字前后必须一致
比如此两行中的1或者5
l1:1:wait:/etc/rc.d/rc 1
l5:1:wait:/etc/rc.d/rc 5
grep "l\([15]\):\1:wait:/etc/rc.d/rc[[:space:]]\{1,\}\1" 文件名
6.使用gerp命令来查看文档中的IP信息:
(1)查找不包含0或者255的IP地址
\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])){2}(\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]))\>
(2)查找包括0或者255的IP地址
\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\>
7.使用grep命令查找网卡的IP地址;
(1)ifconfig eth0 | grep "inet addr" | cut -d: -f2 | cut -d' ' -f1 | grep -v "172.0.0.1"
172.16.24.1
(2)ifconfig | grep "inet addr" | cut -d: -f2 | cut -d' ' -f1 | grep -v "172.0.0.1"
172.16.24.1
172.0.0.1本文出自 “知识体系” 博客,请务必保留此出处http://linuxg.blog.51cto.com/4410110/785357
grep 根据指定模式搜索文档并将符合文档的字符串行显示出来。
正则表达式(regular expression)简写为 regex :是由元字符组合的式子,可当做pattern(模式) 使用,以匹配符合指定特征的字符串。
正则表达式分为基本正则表达式,用字母b表示 和扩展正则表达式,用字母e表示(可以查看帮助手册 man 7 regex)
1.元字符:
<1> ^pattern :行首锚定符,查找的字符串在行首
例如:grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
<2> pattern $ :行尾锚定符
<3> \<pattern :词首锚定符
<4> parttern\> :词尾锚定符
<5> . : 匹配任意单个字符(除了换行符)
<6> * :匹配此前的字符0到任意次(出现的次数)
<7> .* :匹配任意长度的任意字符,
<8> ? :匹配此前的字符0次或者1次
<9> \{m,n\} :匹配此前字符最少m次,最多n次
例如:\{5\} :精确匹配5次
\{5,\} :匹配最多5次
<10> [ ] :匹配指定范围内的任意单个字符
<11> [^ ] :匹配之地范围之外的任意单个字符
<12> [:space:] /[:alpha:]/[:lower:]……. :匹配空格、字母、小写字母等字符
<13> \(\) :引用此前出现的字符,也可以用来分组
2.grep 命令选项
-v 对查找的内容取反
-i 忽略大小写
-r 递归搜索指定的路径
-B # 将对应信息之前的# 行也显示出来
-A # 将对应信息之后的# 行也显示出来
-C # 将对因信息之前和之后的# 行都显示出来
-o 只显示被模式匹配到的字符串本身,而非字符串所在的行
-E 是扩展正则表达式
这里要声明一下扩展正则表达式的某些用法与基本正则表达式的用法是有区别的:
基本正则表达式: 扩展正则表达式:
\{m,n\} 相当于 {m,n}
\( \ ) 相当于 ( )
a|b 表示或者的意思
+ 表示一次匹配1次或者任意次
3.管道的使用: 用“ |“ 表示
管道的用法就是:把前一个命令的输出当做后一个命令的输入
例如:ls -l /etc | more
一个关于正则表达式和管道用法的使用范例:
1。查找如下字符串中形如xxx.xxx.xxx.xxx.的字符串,其中X必须是数字
abc.111.222.333.
12a.333.444.567
11.222.333.444
111.2.333.333
444.444.222.111
33.325.566.6
123.321.123.333
1.2.3.4
12.3.4.5
其中上面这些内容保存在a 文件中
<1>grep --color=auto "[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}" a 444.444.222.111
或者grep --color=auto "\([0-9]\{3\}\.\)\{3\}[0-9]\{3\}" a
444.444.222.111
<2>grep --color=auto -E "([0-9]{3}\.){3}[0-9]{3}" a
444.444.222.111
<3>grep --color=auto -E "([0-9]{1,3}\.){3}[0-9]{1,3}" a
11.222.333.444
111.2.333.333
444.444.222.111
33.325.566.6
<4>grep --color=auto -E "(([0-9]|[0-9]{2}|[0-9]{3})\.){3}([0-9]|[0-9]{2}|[0-9]{3})" a
123.321.123.333
1.2.3.4
12.3.4.5
2.查看当前系统上名字为user1的用户的账号的相关信息。
grep --color=auto "^user1\>" /etc/passwd
3.查找当前系统上以其为附加组的用户超过两个的组的相关信息()
grep --color=auto "[^:]^:[^:]^:[^:]^:[[:alnum:]]\{1,\},.*" /etc/group
4.查找当前系统上其用户账号密码最常使用期限为99999天的用户账户的相关信息
grep --color=auto "[^:]*:[^:]*:[^:]*:[^:]*:99999:" /etc/shadow
5.分析/etc/inittab文件中如下两行的文本特征,请写出可以精确找到类似两行的模式,而且要让数字前后必须一致
比如此两行中的1或者5
l1:1:wait:/etc/rc.d/rc 1
l5:1:wait:/etc/rc.d/rc 5
grep "l\([15]\):\1:wait:/etc/rc.d/rc[[:space:]]\{1,\}\1" 文件名
6.使用gerp命令来查看文档中的IP信息:
(1)查找不包含0或者255的IP地址
\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])){2}(\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4]))\>
(2)查找包括0或者255的IP地址
\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}\>
7.使用grep命令查找网卡的IP地址;
(1)ifconfig eth0 | grep "inet addr" | cut -d: -f2 | cut -d' ' -f1 | grep -v "172.0.0.1"
172.16.24.1
(2)ifconfig | grep "inet addr" | cut -d: -f2 | cut -d' ' -f1 | grep -v "172.0.0.1"
172.16.24.1
172.0.0.1本文出自 “知识体系” 博客,请务必保留此出处http://linuxg.blog.51cto.com/4410110/785357
相关文章推荐
- 文本查找工具grep的使用(含正则表达式用法)
- grep(1) 正则表达式文本查找工具
- 文本查找工具grep,正则表达式,扩展表达式
- Linux的文本处理工具及grep正则表达式的使用
- 66.正则表达式,grep/egrep工具的使用
- 正则表达式-grep工具常见选项的使用
- 文本编辑工具sed查看工具grep和正则表达式
- 20150827-Linux grep文本过滤工具及正则表达式
- bash 正则表达式,文本文件查找 grep egrep
- Linux 文本处理,文本工具,查看,分析,统计文本文件,grep,正则表达式
- VS 2005/2008 开发工具中 使用正则表达式查找替换的使用说明
- 在vs2013中使用正则表达式查找和替换文本内容
- everything 全盘文件查找工具及正则表达式的使用
- 正则表达式,grep/egrep工具的使用
- 利用正则表达式进行文本替换,编辑工具使用UE
- 文本查找工具grep的使用
- Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来
- linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本
- linux文本处理三剑客之grep家族及其相应的正则表达式使用详解
- Python实现的正则表达式文本查找工具