shell脚本第五章文本三剑客之grep

目录

一、正则表达式

1、什么是正则表达式

2、元字符

 3、扩展正则表达式元字符 

二、grep


一、正则表达式

1、什么是正则表达式

REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

  • 正则表达式,又称正规表达式、常规表达式
  • 使用字符串来描述、匹配一系列符合某个规则的字符串

正则表达式组成

  • 普通字符包括大小写字母、数字、标点符号及一些其他符号。
  • 元字符是指在正则表达式中具有特殊意义的专用字符

可以使用

man 7 regex

可以使用man手册帮助

2、元字符

--- 基础正则表达式常见元字符

(支持的工具:grep、egrep、sed、awk)

字符 作用
\

转义,把一些特殊的符号转换成普通的符号字符,还可以把一些普通字符转换成特殊功能,例:\!、\n、\$等

^

表示匹配字符串开始的位置,匹配行首,例: ^a、 ^#
$ 表示匹配字符串末尾的位置,匹配行尾,例: word$、 #$ ;^$表示空行

.

匹配任意的单个字符,例: go.d、g..d
* 匹配前面子表达式0次或者多次,贪婪模式所以尽可能长,例: goo*d、go.*d
.* 表示任意长度的任一字符,不包括0次
\?

匹配其前面字符0或1次,可有可无

\+ 匹配其前面字符最少1次,有且大于等于1次

\{n\}

匹配前面的子表达式n次,例:mo\{2\}y、'[0-9]\{ 2\ }'匹配两位及两位以上数字
\{n,\} 匹配前面的子表达式不少于n次,例: mo\{2,\}y、'[0-9]\{2,\}'匹配两位及两位以上数字
\{,n\} 匹配前面的子表达式不多于n次
\{n,m\} 匹配前面的子表达式n到m次(m>=n),例: mo\{2,3\}y、'[0-9]\{2,3\}'匹配两位到三位数字
注: egrep(grep-E)、awk使用{n }、{n, }、{n,m}匹配时"{}”前不用加"\"
\w 匹配包括下划线的任何单词字符
\W 匹配任何非单词字符。等价于"[^A-Za-z0-9_]"。
\d 匹配一个数字字符
\D 匹配一个非数字字符。等价于[^0-9]。
\s 空白符
[:alpha:] 字母,即A-Z,a-z
[:alnum:] 字母和数字
[:lower:] 小写字母,即a-z
[:upper:] 大写字母,即A-Z
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符、换行符、回车符等各类型空白
[:print:] 可打印字符
[:punct:] 标点符号

 3、扩展正则表达式元字符 

grep -E

字符 作用
+ 表示匹配前面的子表达式1次以上
? 表示匹配前面的子表达式0或者1次

( )

将括号里的内容看成一个整体
|

以或的方式匹配字符串

二、grep

格式:

grep [选项]… 查找条件 目标文件

选项:

选项 功能

-color=auto

对匹配到的文本着色显示
-m  #

匹配到#次后停止;匹配到#行后停止

-v 显示没有被匹配到的行,即取反
-i 忽略字符大小写
-n 显示匹配到的行号
-c 统计匹配到的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A  # 匹配到的行后#行也显示出来
-B  # 匹配到的行前#行也显示出来
-C  # 匹配到的行前后各#行也显示出来
-e 实现多个选项间的逻辑or关系
-w 匹配整个单词
-E 扩展正则表达式,相当于egrep
-F 不支持正则表达式,相当于fgrep
-f

file根据模式文件,处理两个文件相同内容,把第一个文件作为匹配条件

-r 递归目录,但不处理软链接
-R 递归目录,处理软链接

实例:

1、统计当前主机的连接状态

2、统计当前连接的主机数

你可能感兴趣的:(linux,运维,服务器)