grep用法

字符匹配:

1

2

3

4

.: 匹配任意单个字符;

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

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

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

 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式:尽可能长的匹配

1

2

3

4

5

6

7

8

9

10

* :匹配前面的字符任意次,包括0次

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

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

\+ :匹配其前面的字符至少1次,但不需要紧随在第一次后面

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

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

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

<=n次

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

>=m次  

 位置锚定:定位出现的位置

1

2

3

4

5

6

7

8

9

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

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

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

^$: 空行

^[[:space:]]*$ :空白行或包含tab字符的行

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

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

注意:在grep中,字母和数字的组合也被视为单词

\:锚定以PATTERN表达式做为单词的行  

 分组及引用

1

2

3

4

5

6

7

8

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

\(xy\)*ab:xy作为一个整体出现0此或多次

   注意:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部变量中,这些变量为:

    \1:模式从左侧起,第一个左括号以及与其匹配的右括号之间的内容

    \2:模式从左侧起,第二个左括号以及与其匹配的右括号之间的内容

    \3:

    ……

    后向引用:引用前面的分组括号中的模式所匹配的字符,且引用中的数据和分组模式匹配到的数据是一样  

 练习:

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

# grep -v "/bin/bash$" /etc/passwd

2 、显示用户rpc 默认的shell 程序

# grep "^rpc\>" /etc/passwd | cut -d: -f7

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

# grep -E "\<[0-9]{2,3}\>" /etc/passwd

4 、找出"netstat -tan" 命令的结果中以'LISTEN' 后跟0 、1或多个空白字符结尾的行

# netstat -tan | grep "\ 
   

 egrep及扩展的正则表达式

egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
  选项:

    -i,-o,-v,q,-A,-B,-C
    -G:支持基本的正则表达式

 扩展正则表达式元字符:

 字符匹配:

1

2

3

4

.: 匹配任意单个字符;

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

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

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

 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式,尽可能长的匹配

1

2

3

4

5

6

7

8

9

10

* :匹配前面的字符任意次,包括0次

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

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

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

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

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

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

<=n次

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

>=m次   

 位置锚定:定位出现的位置

1

2

3

4

5

6

7

8

9

10

^ :行首锚定

$ :行尾锚定

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

^$: 空行

^[[:space:]]*$ :空白行或包含tab字符的行

\< 或 \b :词首锚定

\> 或 \b :词尾锚定

    注意:在grep中,字母和数字的组合也被视为单词

 

\:锚定以PATTERN表达式做为单词的行   

 分组及引用

1

2

3

4

5

6

():括号内模式会被记录于正则表达式引擎中:

后向引用:\1,\2,\3......

或者

a|b:a或者b

  eg:C|cat :表示C或者cat

    (C|c)at :表示Cat或者cat  

 练习:

1 、显示当前系统上,root,gao和user1用户的相关信息

# grep -E "\<(root|gao|uer1)\>" /etc/passwd

2 、统计以root 身份登录的每个远程主机IP

# who | grep -E "^root\>" | wc -l

3 、使用egrep 取出/etc/rc.d/init.d/functions

# echo "/etc/rc.d/init.d/functions"  | grep -oE "[^/]+/?$"

你可能感兴趣的:(grep用法)