正则表达式

发布于:2024-06-28 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、文本编辑

1、匹配内容

正则表达式匹配的是文本内容,linux的文本三剑客都是针对文本内容

2、文本三剑客

grep 过滤文本内容、sed 针对文本内容进行增删改查、awk 按行取列

文本三剑客都是按照行进行匹配

3、grep选项

作用:使用正则表达式来匹配文本内容

命令操作:grep 选项 文本/路径

选项 作用
-m 数字 按行匹配
-m 匹配几次之后停止
-v 取反
-n 显示匹配的行号
-c 只显示匹配的行数
-o 仅显示匹配的结果
-q (静默模式)不输出任何信息
-A(after) 数字 匹配数字行号后几行
-B(before) 数字 匹配数字行号前几行
-C 数字 匹配数字行号前后各几行
-e 或者
-E 匹配扩展正则表达式
-f 匹配两个文件相同内容,以第一个文件为准
-r 递归目录 目录下的文件内容。软连接不包含在内
-R 递归目录 目录下的文件内容,包含软连接
操作命令 grep -f 文件1 文件2

4、sort排序

作用:以行为单位,对文件内容进行排序

命令操作:sort 选项 参数

​ cat file | sort 选项

选项 作用
-f 忽略大小写,默认把数字往前排,大写字母放在后面
-b 忽略每行之前的空格(不是删除空格,只是依旧按照数字和字母的顺序排列)
-n 按照数字进行排序(字母和数字,字母在前,数字在后)
-r 反向排序
-rn 完全按照数字取倒序
-u -u 相同数据仅显示一行 去重
-o 将排序后结果转存到指定文件

5、uniq

作用:去除连续重复的,只显示一行

选项 参数
-c 统计连续重复行的次数,合并连续重复的行
-u 显示仅出现一次的行(包括不是连续出现的重复行)
-d 仅显示连续重复的行(不包括非连续出现的内容)

6、tr

tr 选项 参数

选项 参数
-c 保留字符集1的字符,其他字符用字符集2来进行替换
-d 删除字符集中的一部分
-s 把字符集1的部分替换成字符集2的部分;把连续重复出现的字符串压缩成一个字符串

7、cut

cut 快速裁剪 与awk类似 都可按行取列

作用:对字段进行截取和裁剪

选项 参数
-d 指定分隔符 (默认的分隔符是tab键)
-f 对字段进行截取,指定输出段的内容
-complement 输出内容排除指定字段
-output-delimiter 更改输出内容的分隔符,指定改变分隔符=
-b 以字节为单位进行截取
-c 以字符为单位进行截取

8、split文件的拆分

split 大文件拆分成若干小的文件

-l 按行来进行分割

-b 按照大小来进行分割

拓展题:现在有一个日志文件,很大,5G,第一个能不能快速的打开?

答: 拆分:-l 按行 -b 大小。这种文件推荐使用按大小

9、cat、paste文件合并

cat、paste

拓展题:1、cat合并和paste合并之间的区别

​ 答:cat是上下合并,paste是左右合并

​ 2、统计当前主机的连接状态

​ 答:netstat -antp、ss -antp

ss -antp | grep -v '^State' | cut -d " " -f 1 | sort | uniq -c

二、正则表达式

(一)概念

1、概念:由特殊字符以及文本字符所编写的一个模式,这些模式用来匹配文件当中的内容(字符)。

2、作用:校验我们输入的内容是否符合规定、格式、长度等等要求

​ 主要用来匹配文本内容,命令的结果

3、通配符:只能用于匹配文件名和目录名,不能匹配文件内容

(二)正则表达式

1、基本正则表达式

1.1 元字符(字符匹配)

.:任意单个字符,也可以是一个汉字

\:转义符 恢复其本意 (加引号 如"\ .")

[] :匹配指定范围内的任意单个字符或者数字

[^] :取反 ^[]内表示去反,^[]外表示以什么为开头

^# :匹配以#开头的行

^$ :匹配空行

1.2 次数匹配

表示此时,匹配字符出现的次数

*:匹配前面的字符任意次,0也可以。贪婪模式,尽可能的匹配

.* :匹配前面任意字符,至少要有一次,匹配所有

\?:匹配前面的字符0次或者1次,可有可无的意思

\+ :匹配前面的字符,至少要出现一次>=1

\{n\} :匹配前面的字符=n次,可以小于n,不能大于n,而且前面的字符必须要连续出现

\{m,n\} :匹配前面的字符至少m次,至多n次,需要连续出现,超出的不在匹配范围

\{,n\} :匹配前面的字符最多n次,不能少于n次,但是可以超过n次,需要连续出现

\{n,\} :匹配前面的字符最少n次

1.3 位置锚定

^:以什么开头,行首锚定

$:以什么结尾,行尾锚定

\<或者\b :词首锚定 匹配单词的左侧(连续的数字,字母,下划线都算单词内部) 参数\b,完整

\>或者\b :词尾锚定 用于匹配单词的右侧 \b 参数

区别

\broot\b 匹配这个单词,空格隔开也可以

^root$:匹配整行,空格隔开不可以

1.4 分组和逻辑关系

分组:()

或者:\|

(三)扩展正则表达式

egrep和grep -E:支持扩展正则表达式,不需要转义符\

扩展正则表达式和基本正则表达式规则一样,扩展正则表达式不需要转义符\,除了位置锚定中的词首锚定和词尾锚定需要有转义符\,别的在使用规则的时候可以去掉转义符使用。

()分组 | 或者