shell编程三剑客之grep与正则表达式

一 grep工具

grep是行过滤工具,用于根据关键字进行行过滤

语法:
grep -选项 “关键字” 文件名

1.1 常用选项

选项 含义
-i 不区分大小写
-v 查找不包括关键字的行,即反向选择
-w 按单词进行搜索,匹配有且仅有的字符
-o 仅显示匹配到的字符串
-c 统计匹配到的次数
-n 显示行号
-r 逐层遍历目录查找
-A n 显示匹配行及后面(after)n行
-B n 显示匹配行及前面(before)n行
-C n 显示匹配行及前后n行
-e 使用正则表达式
-E 使用扩展正则表达式
-P 匹配数字、字母或字符串

1.2 选项解释

测试文本内容如下
在这里插入图片描述
grep -w
命令: grep -w ‘cen’ sedtest.txt
在这里插入图片描述
由图可见,在不包含选项-w的时候,只要文本中有“cen”就会过滤出来,而加上-w之后需要文本中存在这个单词才会过滤出来

grep -o
命令: grep -o ‘cenjeal’ sedtest.txt
在这里插入图片描述

由图可见,不包含-o的时候会输出一整行,而使用-o选项后则只显示匹配的字符串

grep -P
命令:grep -P ‘\d’ sedtest.txt 匹配数字
命令:grep -P ‘\w’ sedtest.txt 匹配字母数字下划线
命令:grep -P ‘\s’ sedtest.txt 匹配字符串
在这里插入图片描述

二 正则表达式

2.1 正则表达式的含义

正则表达式(Regular Expression、regex或regexp,缩写为RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。
支持正则表达式的程序如:find| vim| grep| sed |awk

2.2 正则表达式的应用场景

1.匹配邮箱、匹配身份证号码、手机号、银行卡号等
2.匹配某些特定字符串,做特定处理等等

2.3 正则表达式名词解释

元字符

指那些在正则表达式中具有特殊意义的专用字符,如:点(.) 星(*) 问号(?)等

前导字符

位于元字符前面的字符. abc* aooo.

2.4 第一类正则表达式

普通常用元字符

元字符 功能 示例
. 匹配除了换行符以外的任意单个字符
* 前导字符出现0次或连续多次
.* 匹配任意长度字符
^ 行首(以…开头) ^root
$ 行尾(以…结尾) root$
^$ 匹配空行 常用
[] 匹配括号里任意单个字符或一组单个字符 [abc]
[^] 匹配不包含括号里任一单个字符或一组单个字符 [^abc]
^[^] 匹配不以括号里任意单个字符或一组单个字符开头 ^[^abc]

其他常用元字符

元字符 功能 示例
\< 取单词的头 grep ‘\<hel’ 1.txt
\> 取单词的尾 grep ‘rld\>’ 1.txt
\< \> 精确匹配 grep ‘\<hello\>’ 1.txt
\{n\} 匹配前导字符连续出现n次
\{n,\} 匹配前导字符至少出现n次
\{n,m\} 匹配前导字符出现n次与m次之间
\( \) 保存被匹配的字符 sed ‘s/(10.1.1.).1/\1.254/g’ 1.txt
\d 匹配数字(grep -P) [0-9]
\w 匹配字母数字下划线(grep -P) [a-zA-Z0-9_]
\s 匹配空格、制表符、换页符(grep -P) [\t\r\n]

常用扩展元字符
grep必须加 -E 或者使用egrep

sed必须加 -r

扩展元字符 功能 示例
+ 匹配一个或多个前导字符
匹配零个或一个前导字符
| 匹配a或b
() 组字符(看成整体) (my|your)self:表示匹配myself或匹配yourself
{n} 前导字符重复n次
{n,} 前导字符重复至少n次
{n,m} 前导字符重复n到m次

2.5 第二类正则表达式

扩展元字符 功能 示例
[:alnum:] 字母与数字字符 [[:alnum:]]+
[:alpha:] 字母字符(包括大小写字母) [[:alpha:]]{4}
[:blank:] 空格与制表符 [[:blank:]]*
[:digit:] 数字 [[:digit:]]?
[:lower:] 小写字母 [[:lower:]]{4,}
[:upper:] 大写字母 [[:upper:]]+
[:punct:] 标点符号 [[:punct:]]
[:space:] 包括换行符,回车等在内的所有空白 [[:space:]]*

猜你喜欢

转载自blog.csdn.net/cenjeal/article/details/108228388