Linux:shell脚本:基础使用(4)《正则表达式-grep工具》

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

正则表达式定义

        使用单个字符串来描述匹配一系列符合某个句法规则的字符串

正则表达式的组成

        普通字符串: 大小写字母数字标点符号及一些其他符号

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

正则表达式不能单独使用需要配合一些命令 如 grep sed 等命令 


正则表达式

我们先创建一个文件用于测试

he was short and fat.
He was wearing a blue polo shirt with black pants.
The home of Football on BBC Sport online.
the tongue is boneless but it breaks bones.12!
google is the best tools for search keyword.
The year ahead will test our political establishment to the li
PI=3.141592653589793238462643383249901429
a wood cross!
Actions speak louder than words

#woood #
#woooooood #
AxyzxyzxyzxyzC
I bet this place is really spooky late at night!
Misfortunes never come alone/single.
I shouldn't have lett so tast.

以上字符是我准备的一个文件的内容等会我们用grep命令使用正则表达式去检索内容

 文件名称无所谓我的叫tarro.txt


 grep

 我们使用grep查询里面某一个指定的字符串  the

grep 'the' tarro.txt  

里面每行带有the字符串的就出来了

如果想知道我们查找的字符串在第几行 

grep -n 'the' tarro.txt  

前面的数字就是在文件里的行也就是这段在文件中的几行几行

如果想知道在文件中第几行并且不区分大小写也就是我们指定的字符串无论大小写都展示出来

grep -in 'the' tarro.txt 

这样我们查找出来的就不区分大小写了即使我们查的是小写the加了-i 那么大写小写都会有

 如果正好相反我们不想查包含指定字符串的行

grep -nv 'the' tarro.txt 

-v就是反向查找我们后面指定的字符串就反过来就查找不带他们的行,反向查找不包含the的行


 利用中括号[]来查找集合字符

[] ---里面无论有几个字符都仅代表一个字符为‘或’关系
[^]   --- 括号里面的‘^’是取反的意思

查找包含shirt 或short的行 

grep -n 'sh[io]rt' tarro.txt

可以看到他们中级的字符不一样我们使用了查找  以sh  开通  rt结尾中间o或者i  两个就全出来了

查找重复单个字符‘oo’的行

grep -n 'oo' test.txt 

里面只要是两个oo相连的字符串就被查询出来了 

查找‘oo’前不是‘w’的行 

grep -n '[^w]oo' tarro.txt 

去掉了w开头的那为什么#woood # 和 #woooooood # 没被去掉因为他们相连的字符串是以#开头的你可以和上一个比对一下

查找‘oo’前不是小写字母的行 

grep -n '[^a-z]oo' tarro.txt

现在前面小写的a-z开通的都被去掉了F是大写的所以还在 

查找‘oo’前不是大写字母的行

grep -n '[^A-Z]oo' tarro.txt 

刚刚那个F开头的就没了就剩下一些小写开头的行了

查找包含数字的行

 grep -n '[0-9]' tarro.txt 

上图只要是行内带有数字的行就被查出来了 

 查找行首^与行尾字符$

小数点‘.’在正则表达式中为元字符需要使用转义字符‘\’将其转化为普通字符

查找以小数点‘.’结尾的行。

grep -n '\.$' tarro.txt

查找空行 

grep -n '^$' test.txt 

查找以‘w’开头‘d’结尾共4个字符的行 

grep -n 'w..d' tarro.txt

查询至少包含两个o以上的字符串

grep -n 'ooo*' tarro.txt  

查找以‘w’开头中间至少包含一个‘o'的‘d’结尾的行

grep -n 'woo*d' tarro.txt  

查找以‘w’开头‘d’结尾 中间字符可有可无 的行 

grep -n 'w.*d' test.txt 

查询任意数字的行 

grep -n '[0-9][0-9]*' test.txt 


  查找连续字符范围{}

使用'.' 和'*'可以设置零个或无限多个重复的字符
如果要限制一个范围则使用‘{}’

查看2个o的字符 

grep -n 'o\{2\}' test.txt 

查看w开头d结尾中间为2-5个o的字符串
grep -n 'wo\{2,5\}d' test.txt 

查看w开头d结尾中间为2以上o的字符串
grep -n 'wo\{2,\}d' test.txt  


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

\b   单词的开头或结尾,只匹配一个位置不匹配分隔标点符号和空格    \bHello\b
\d   一个数字等价于 [0-9]    0\d\d-\d{8} 固定电话
*      数量它前面的内容以连续使用的任意次数以达到整个表达式匹配,可以是0次匹配  .* 
+     和* 类似但至少匹配1次, 匹配一个或多个     \d+
   和上面两个类似重复0次或一次
.      匹配除了换行符以外任意字符  
\s    匹配任意的空白符、制表符、换行符、中文全角空格等
\w 匹配字母、数字、汉字或者下划线
^   用来查找的字符串的开头   ^\d{5,12}$    5~12位的QQ
$   用来查找的字符串的结尾
{n}       前面必须连续重复匹配n次\d{8}   \bw{6}\b 刚好6个字符的单词
{n,m}   前面必须连续重复匹配n~m次
{n,}       前面必须连续重复匹配n~更多次
\   如果需要查找元字符需要转义 
[]   里面的字符可以不用转义用来定义匹配集合   [?.*()]

3.扩展正则表达式----egrep、awk命令支持
3.1 扩展正则表达式的常见元字符
+        重复一个或者一个以上的前一个字符

        零个或者一个的前一个字符

|        使用或者or的方式找出多个字符

()        查找“组”字符串

()+        辨别多个重复的组

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shelllinux