首页 > 代码库 > grep

grep

grep: Global search REgular expression and Print out the line.

模式:由正则表达式字符及文本字符所编写的过滤条件;

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

  • COMMAND

grep [OPTIONS] PATTERN [FILE...]

--color=auto: 对匹配到的文本着色显示;

-v: 显示不能够被pattern匹配到的行;

-i: 忽略字符大小写;

-o: 仅显示匹配到的字符串;

-q: 静默模式,不输出任何信息;

-A #after, #

-B #: before, #

-C #context, 前后各#

-E:使用ERE

 EXAMPLE:

显示/tmp/meminfo文件中以大小s开头的行l

[root@locahost /]# egrep -o "^[S,s]*" /tmp/meminfo

显示/etc/passwd文件中不以/bin/bash结尾的行

[root@localhost /]# grep -v "/bin/bash$" /etc/passwd

显示/etc/passwd文件中ID号最大的用户的用户名

[root@localhost /]# sort -t: -nr -k 3 /etc/passwd | head -n 1 | cut -d: -f 1,3

如果用户root存在,显示其默认的shell程序;

id root &> /dev/null && grep "^root" /etc/passwd | cut -d: -f 1,7

找出/etc/passwd中的两位或三位数

[root@localhost /]# grep "[0-9]\{2,3\}" /etc/passwd


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

字符匹配:

.:  匹配任意单个字符;

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

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

[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;

*:匹配前面的字符任意次;

例如: grep "x*y"

abxy

xay

xxxxxxy

贪婪模式

.*:任意长度的任意字符;

\?:匹配其前面的字符0或1次;即前面的可有可无;

\+:匹配其前面的字符至少1次;

\{m\}:匹配前面的字符m次;

\{m,n\}:匹配前面的字符至少m次,至多n次;

\{0,n\}:匹配前面的字符至多n次;

\{m,\}:匹配前面的字符至少m次;

位置锚定:

^:行首锚定;用于模式的最左侧;

$:行尾锚定;用于模式的最右侧;

^PATTERN$: 用于模式匹配整行;

^$: 空行;

^[[:space:]]*$

\< 或 \b:词首锚定;用于单词模式的左侧;

\> 或 \b:词尾锚定;用于单词模式的右侧;

\<PATTERN\>:匹配整个单词;

分组:

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

\(xy\)*ab

 

Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...

\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

\(ab\+\(xy\)*\):

\1: ab\+\(xy\)*

\2: xy

 

后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)

本文出自 “勤能补拙” 博客,谢绝转载!

grep