Shell脚本之文本处理三剑客——grep(含正则表达式详解)
简要介绍grep命令的常用选项,详细介绍了正则表达式内容
·
目录
一.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次

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

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

更多推荐




所有评论(0)