ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

day28linux正则表达式学习笔记

2022-04-17 14:00:32  阅读:214  来源: 互联网

标签:字符 good 匹配 正则表达式 笔记 括号 正则 day28linux grep


通配符和正则的区别

1.从语法上就记住,只有awk、gre、sed才识别正则表达式符号、其他都是通配符

2.从用法上区分

  • 表达式操作的是文件、目录名(属于是通配符)
  • 表达式操作的是文件内容(正则表达式)

基本正则表达式

测试文本数据

[root@yuchao-tx-server test]# cat chaoge666.txt
I am teacher yuchao.
I teach linux,python!

I like english

My website is http://yuchaoit.cn
Our school site is https://apecome.com
My qq num is 877348180

Good good study , day day up!

关于单引号、双引号

  • 正则的模式,建议使用双引号
  • 如果未涉及变量等,用单引号也不影响

^ 尖角符

语法
写于最左侧,如
^my 逐行匹配,找到以my开头的内容

 

 

 

 

$ 美元符

语法

word$ 匹配以word结尾的行

 

 

^$ 匹配空行

找出文件的空行

 

 

. 点符

 . 匹配除了换行符以外所有的内容、字符+空格,除了换行符。

 

. 点处理空格、换行

. 可以匹配到空格,以及任意字符

但是点,不匹配换行符。

 

 

 

 .代表任意一个字符

.$ 匹配任意字符结尾

 

 

 

. 和转义符

只想拿到每一行结尾的普通小数点 .,需要对点转义

 

 

 

 

\ 转义符

转义字符,让有特殊意义的字符,现出原形,还原其本义。

* 星号

重复前一个字符0此或n次

 

 

 

.* 符

匹配任意字符

.表示任意一个字符,*表示匹配前一个字符0次或多次

因此放一起,代表匹配每一行所有内容,包括空格

注意 . 点不匹配换行

 

 

 

^.* 符

语法
^.* 表示以任意多个字符开头的行

.*$ 符

以任意多个字符结尾的行

 

[ ] 中括号

中括号,有如下用法

[abc]

[abc] 匹配括号内的小写a、b、c字符

 

 

 

[a-z]、 [A-Z] 、[a-zA-z]、[0-9]

[a-z]                匹配所有小写单个字母
[A-Z]                匹配所有单个大写字母
[a-zA-Z]        匹配所有的单个大小写字母
[0-9]                匹配所有单个数字
[a-zA-Z0-9]    匹配所有数字和字母

[a-z] 匹配小写字母

 

 

 [A-Z] 匹配大写字母

 

 

 [a-z0-9A-Z] 匹配大写、小写字母、数字

 

 

 [^]取反

语法

[^abc] 排除中括号里的a、b、c ,和单独的^符号,作用是不同的

[^a-z] 排除小写字母

{ } 花括号(扩展正则)

a\{n,m\}

a\{n,m\} 重复字符a,n到m次

a\{1,3\} 重复字符a,1到3次

正则

8\{1,3\}
匹配数字8一次到3次

 

  

 

 

 

grep 默认不认识扩展正则 {}

grep默认不认识扩展正则{},识别不到它的特殊作用,因此只能用转义符,让他成为有意义的字符。

办法1
使用转义符 \{\}

办法2,让grep认识花括号,可以省去转义符
使用egrep命令
或者 grep -E

a\{n,\}

重复a字符至少n次,可以用简写了

 

 

 

a\{n\}

重复字符a,正好n次。

 

 

 

a\{,m\}

匹配字符a最多m次。

 

 

 

+ 加号

语法

+ 
重复前一个字符1次或多次
注意和*的区别,*是0次或多次

匹配一次或者多次0,没有0的行是不会显示的

0+

找出一个、或者多个数字零

 

 

 

 

[0-9]+

从文中找出连续的数字,排除字母,特殊符号、空格

 

 

 

[a-z]+

找出连续的小写字母、排除大写字母、标点符号、数字

 

 

 

[^A-Za-z0-9]+]

此写法,找出除了数字、大小写字母以外的内容,如空格、标点符号。

你可以使用-o参数,看到每次匹配的内容。

 

 

 

*和+的区别

语法
*是重复0次、重复多次,因此没匹配到的行也过滤出来了

+是重复1次、多次、因此至少匹配到1次才看到

 

 

 

go*d和go+d和go?d区别

准备测试数据

I am God, I need you to good good study and day day up, otherwise I will send you to see Gd,oh sorry, gooooooooood!

 

 

 

| 或者符

竖线在正则里是或者的意思

查看文件系统inode和block信息

dumpe2fs /dev/sdc |grep -Ei '^(inode|block)'
 

( ) 括号、分组符

语法
() 作用是将一个或者多个字符捆绑在一起,当做一个整体进行处理

小括号功能之一是分组过滤被括起来的内容,括号内的内容表示一个整体

括号()内的内容可以被后面的"\n"正则引用,n为数字,表示引用第几个括号的内容

\1:表示从左侧起,第一个括号中的模式所匹配到的字符
\2:从左侧起,第二个括号中的模式所匹配到的字符

分组基本用法

测试数据
[root@yuchao-tx-server test]# cat god.log
I am God, I need you to good good study and day day up, otherwise I will send you to see Gd,oh sorry, gooooooooood!
I am glad to see you, god,you are a good god!

要求仅仅匹配出glad和good

尝试使用正则
grep -iE "gla|ood" god.log

并非我们想要的数据
我想要的是例如这样的匹配,只找出good、glad
grep -iE "glad|good" god.log

可以使用分组写法

grep -iE "g(la|oo)d" god.log

分组与向后引用

语法
()      
分组过滤,被括起来的内容表示一个整体,另外()的内容可以被后面的\n引用,n为数字,表示引用第几个括号的内容

\n      
引用前面()里的内容,例如(abc)\1 表示匹配abcabc

 

 

提取/etc/passwd

找出系统中几个特殊shell、专门用来开机,关机的用户
特点是、用户名、登录shell名字一样
可以用分区提取出

分组正则,提取特殊用户

这部分正则需要拆开,更容易理解
1.提取冒号以外的字符,使用+可以匹配更多字母,没必要每次只处理一个
grep -Ei "[^:]+" /etc/passwd

2. 使用\b匹配单词边界,提取出单词,示例用法,通常英文单词的边界是空格,标点符号
[root@yuchao-tx-server test]# echo  'my name is chao,everyone call me chaoge' | grep -Ei "chao\b" -o
chao

3.继续提取用户文件,来确定第一个单词的边界

 

 

正则记忆表

 

 

 

 

 

 

 

标签:字符,good,匹配,正则表达式,笔记,括号,正则,day28linux,grep
来源: https://www.cnblogs.com/huquchangzhen/p/16140940.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有