Linux三剑客 grep基础正则使用

本文详细介绍了Linux正则表达式的常用符号及其作用,包括^匹配行首,$匹配行尾,^$匹配空行,.匹配任意单字符,用于转义,*表示重复,.*匹配所有内容等。通过实例演示了如何使用grep命令进行正则匹配,如查找以特定字符开头或结尾的行,匹配任意字符和连续出现的字符等。同时,讲解了中括号[]和[^abc]的用法,以及正则的贪婪匹配特性。
摘要由CSDN通过智能技术生成

正则表达式
字符作用
^表示匹配以尖角号后面的单词开头的行
$表示匹配以美元符后面的单词结尾的行
^$表示空行
.匹配任意一个且只有一个字符
\让有特殊含义的字符输出自身
*重复前一个字符(连续出现)0次或N次
.*匹配所有内容
^.*匹配任意多个字符开头的内容
.*$匹配任意多个字符结尾的内容
[abc]匹配[]集合内的任意一个字符
[^abc]不匹配^后的任意字符
1 ^ 尖角号 表示匹配以尖角号后面的单词开头的行
grep '^my' oldboy.txt
grep '^I' oldboy.txt

在这里插入图片描述

2 $ 美元符 表示匹配以美元符后面的单词结尾的行
grep '448$' oldboy.txt
grep '448' oldboy.txt

在这里插入图片描述

grep 'm$' oldboy.txt
cat -A oldboy.txt
grep 'm $' oldboy.txt

在这里插入图片描述

我们使用m$没找到以m结尾的行,我们cat查看文件内容,发现是以m结尾的行。我们使用cat -A查看文件中的隐藏字符发现,m后面还有空格,使用m $即可匹配

3 ^$ 组合符 表示空行

空格也是字符,查找含有空格的行

grep ' ' oldboy.txt

在这里插入图片描述

grep '^$' oldboy.txt
grep -n '^$' oldboy.txt

在这里插入图片描述
显示空行一般意义不大,我们一般用-v ^$排除空行

grep -v '^$' oldboy.txt
grep -nv '^$' oldboy.txt

在这里插入图片描述

4 . 点号 匹配任意一个且只有一个字符
grep '.' oldboy.txt

在这里插入图片描述
这样就匹配了所有字符,由于空行不是字符,故这种方式也能排除空行

查找以.结尾的行

grep '.$' oldboy.txt

在这里插入图片描述
注意,这条指令匹配的是以任何字符结尾的行,而不是以.结尾的行,于是我们需要使用转义字符\

5 \ 转义字符 让有特殊含义的字符输出自身

查找以.结尾的行

grep '\.$' oldboy.txt

在这里插入图片描述

6 * 星号 前一个字符连续出现0次或N次
  • 连续出现:0(0出现1次)、00(0出现2次)、00000(0出现5次)、asdfgh(6个字符连续出现1次)

查找出现0次或多次的0,出现一次也算连续出现

grep '0*' oldboy.txt

在这里插入图片描述

为何还显示出了文件其他部分呢?

*表示出现0次或者0次以上,出现0次,相当于是空,即没有这个字符

在这里插入图片描述
当grep的正则中什么都不写时,就把文件内容都显示出来了

7 .* 组合符 匹配所有内容、任何内容、任意内容
grep '.*' oldboy.txt

.*也可以匹配空行

在这里插入图片描述
我们想匹配从开头到字符t的部分,中间可以是任意字符

grep '^.*t' oldboy.txt

在这里插入图片描述
我们想匹配从开头到字符o的部分,中间可以是任意字符

grep '^.*o' oldboy.txt

在这里插入图片描述
我们本来想的是,匹配到一行第一个o即可,正则帮我们匹配到了最后一个o,这就是正则的贪心原则

grep "^.*zx" oldboy.txt     # 从开头匹配到zx停止
grep "fq.*$" oldboy.txt     # 从fq开始匹配到结尾
8 [abc] 中括号匹配[]集合内的任意一个字符
grep '[abc]' oldboy.txt

在这里插入图片描述
匹配[abc]内任意一个字符,可我们看见匹配了ac,这是俩字符,我们显示一下匹配过程

grep -o '[abc]' oldboy.txt

在这里插入图片描述
a和c是分两次匹配的

我们一般这样使用:[a-z]、[A-Z]、[0-9],用于匹配ASCII码表上相邻的字符

grep '[a-z]' oldboy.txt

在这里插入图片描述

grep '[a-zA-Z0-9]' oldboy.txt
grep '[a-Z0-9]' oldboy.txt
grep -i '[a-z0-9]' oldboy.txt    # -i不区分大小写

在这里插入图片描述

grep '[a-Z 0-9]' oldboy.txt
grep '[a-Z,0-9]' oldboy.txt      # 匹配逗号

[]还能去掉特殊含义[a-z|A-Z|0-9]表示匹配大小写字母和数字,以及|,有点类似于转义字符的功能

在这里插入图片描述

9 [^abc] 匹配不包含^后的任意字符

在中括号里,^表示取反

grep '[^abc]' oldboy.txt

在这里插入图片描述

(0基础学Linux系列)2.03 Linux正则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bugcoder-9905

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值