首页 > 代码库 > 文本处理工具之grep、egrep
文本处理工具之grep、egrep
-:常见的通配符:* ? []
*:匹配任意长度的任意字符
?:匹配任意一个字符
[]:匹配指定范围内的任意单个字符
[^]:脱字符,表示取反的意思
二:正则表达式:是一种查找以及字符串替换操作。分为基本正则表达式和扩展正则表达式。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于:
检查文本中是否含有指定的特征词
找出文中匹配特征词的位置
从文本中提取信息,比如:字符串的子串
修改文本
基本正则表达式:
元字符:不表示字符本身的意义,用于额外功能性的描述。
基本正则表达式的元字符:
字符匹配:
.: 任意单个字符
[]: 指定范围内的任意单个字符
[0-9], [[:digit:]]
[a-z], [[:lower:]]
[A-Z], [[:upper:]]
[[:alpha:]]所有大小写字母
[[:alnum:]]包含数字和字母表
[[:space:]]所有空白字符
[[:punct:]]所有标点符号
[^]:指定范围外的任意单个字符
次数匹配:用来指定匹配其前面的字符的次数
*: 任意次
例子:x*y, xxy, xy, y,
.*: 匹配任意长度的任意字符
\?: 0次或1次
x\?y, xy, y, xxy
贪婪模式:尽可能的长的去匹配字符;
\{m\}: 匹配m次
\{m,n\}:
\{m,\}: 至少m次;
\{0,n\}:至多n次;
位置锚定:用于指定字符出现的位置
^: 锚定行首
^Char
$: 锚定行尾
char$
^$: 空白行
\<char: 锚定词首,\bchar
char\>: 锚定词尾,char\b
分组:\(\)
\(ab\)*xy
引用:\1 ,\2 ,\3... 后向引用,引用前面的从左往右数第1,第2,第3...个左括号以及与之对应的右括号中的模式所匹配到的内容。
grep:
文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行.
格式:grep [options] ‘PATTERN‘ filename,...
grep 常用选项:
-v: 反向,显示不能被模式所匹配到的行;
-o: 仅显示被模式匹配到的字串,而非整行;
-i: 不区分字符大小写, ignore-case
-E: 支持扩展的正则表达式
-A #:显示匹配行及下面的#行
-B #
-C # 显示匹配行及上下各#行
-c:统计匹配行数
-w:指定要搜索的单词
-n: 在输出的每行前加上它所在的文件中它的行号
-e:指定多个匹配模式
--color=auto
练习:
1、显示/proc/meminfo文件中以大小写s开头的行;
# grep "^[sS]" /proc/meminfo
# grep -i "^s" /proc/meminfo
2、取出默认shell为非bash的用户;
# grep -v "bash$" /etc/passwd | cut -d: -f1
3、取出默认shell为bash的且其ID号最大的用户;
# grep "bash$" /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1
4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
# grep "^[[:space:]]\{1,\}[^[:space:]]\{1,\}" /boot/grub/grub.conf
6、找出/etc/passwd文件中一位数或两位数;
# grep --color=auto "\<[0-9]\{1,2\}\>" /etc/passwd
7、找出ifconfig命令结果中的1到255之间的整数;
# ifconfig | grep -E --color=auto "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
8、查看当前系统上root用户的所有信息;
# grep "^root\>" /etc/passwd
9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;
# grep --color=auto "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd
10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行;
11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示;
# cut -d: -f7 /etc/passwd | sort -u
2.扩展正则表达式
egrep:使用扩展正则表达式来构建模式,相当于grep -E
字符匹配:
.: 任意单个字符
[]: 指定范围内的任意单个字符
[^]: 指定范围外的任意单个字符
次数匹配:
*:匹配其前面的字符任意次;
?: 匹配其前面的字符0或1次;
+: 匹配其前面的字符至少1次
{m}: 匹配其前面的字符m次;
{m,n}: 至少m次,至多n次
{m,}: 至少m次;
{0,n}:至多n次;
锚定:
^: 行首
$: 行尾
\<, \b: 词首
\>, \b:词尾
分组:
(): 分组
|: 或者,C|cat匹配C或cat
(C|c)at匹配Cat或cat
注意:使用扩展的正则表达式,基本正则表达式中的?,+,{},()等都不需要使用转义符\
本文出自 “开开心心每一天” 博客,请务必保留此出处http://as007012.blog.51cto.com/6215447/1547124
文本处理工具之grep、egrep