首页 > 代码库 > 文本处理工具之grep、egrep

文本处理工具之grep、egrep

-:常见的通配符:* ? []

*:匹配任意长度的任意字符

?:匹配任意一个字符

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

[^]:脱字符,表示取反的意思


二:正则表达式:是一种查找以及字符串替换操作。分为基本正则表达式和扩展正则表达式。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于:

  • 检查文本中是否含有指定的特征词

  • 找出文中匹配特征词的位置

  • 从文本中提取信息,比如:字符串的子串

  • 修改文本

  1. 基本正则表达式

    元字符:不表示字符本身的意义,用于额外功能性的描述。

    基本正则表达式的元字符:

         字符匹配:

.: 任意单个字符

[]: 指定范围内的任意单个字符

[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:指定多个匹配模式

wKiom1QC5XHw2JE_AACYeAFmEKQ982.jpg

        --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