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:]]*
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值