目录

一.grep命令选项详解

二.正则表达式

1.正则表达式是什么?

2.元字符

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

2.2  扩展正则表达式元字符


一.grep命令选项详解

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

选项介绍:

-m匹配几次后停止
-v反选
-i忽略字符大小写
-n显示匹配行号
-c统计匹配行数
-o仅显示匹配到的字符串
-q静默模式
-A后几行
-B前几行
-C前后各几行
-e多个选项之间“或者”关系
-w匹配整个单词
-E启用扩展正则表达式 =egrep
-F不支持正则表达式 =fgrep
-f处理两个文件的相同内容,以第一个文件作为匹配条件
-r递归,但不处理软链接
-R递归,处理软链接

示例1:统计lsblk命令显示中磁盘总个数

lsblk |grep disk |wc -l

 示例2:在大量文件中快速过滤/etc/文件夹下包含root单词的所有文件

grep -rw 'root' /etc

二.正则表达式

1.正则表达式是什么?

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板,Linux工具可以用它来过滤文本。

Linux的工具(如sed编辑器或者awk程序)能够在处理数据时使用正则表达式对数据进行模式匹配,如果数据符合匹配的要求,那么就会进入下一步处理;如果数据不符合匹配的要求,就会被过滤掉。

  • 正则表达式,又称正规表达式、常规表达式

  • 使用字符串来描述、匹配一系列符合某个规则的字符串

  • 正则表达式组成

    • 普通字符包括大小写字母、数字、标点符号及一些其他符号。

    • 元字符是指在正则表达式中具有特殊意义的专用字符

2.元字符

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

(支持的工具: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:]标点符号
  • ^   表示匹配字符串开始的位置,匹配行首

  • $   表示匹配字符串末尾的位置,匹配行尾

  • *  匹配前面子表达式0次或者多次,贪婪模式所以尽可能长

  •  .  匹配除\n之外的任意的一个字符

  • .*  表示任意长度的任一字符,不包括0次

  • \{n\}  匹配前面的子表达式n次

2.2  扩展正则表达式元字符

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

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

( )

将括号里的内容看成一个整体
|以或的方式匹配字符串
  • +   表示匹配前面的子表达式1次以上

  •  ?  表示匹配前面的子表达式0或者1次

  • ( )   将括号里的内容看成一个整体

  • |  以或的方式匹配字符串

更多推荐