C04S06-Shell编程之正则表达式

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

一、正则表达式

1. 正则表达式概述

正则表达式是用于匹配文本内容,而通配符是匹配文件名称。使用正则表达式的时候,避免出现歧义,最好将表达式写在引号当中。

2. grep命令 – 文本搜索工具

grep命令来自英文词组global search regular expression and print out the line的缩写,意思是用于全面搜索的正则表达式,并将结果输出。通常会将grep命令与正则表达式搭配使用,实现文本字符的搜索。

grep [选项] [表达式] 文件

常见的选项:

选项 功能
-A 显示匹配行,并显示后面的NUM行
-B 显示匹配行,并显示前面的NUM行
-c 只显示匹配的行数
-C 显示匹配行,并显示前后的NUM行
-E 支持扩展正则表达式
-f 根据模式文件匹配文本内容,可用于匹配两个文件的相同内容
-i 忽略匹配词大小写
-m 最大匹配次数
-n 显示匹配行及行号
-o 只显示匹配部分
-r 递归匹配搜索
-R 递归匹配,包括链接文件
-v 显示非匹配行
-w 精准匹配词
-x 精准匹配行

常见的正则表达式:

表达式 功能
. 匹配除换行符外的任意单个字符
^ 从开端开始匹配
比如:^江,匹配“江”开头的单词
$ 从末端开始匹配
比如:苏$,匹配“苏”结尾的单词
^$ 匹配空行

3. sort命令 – 对文件内容进行排序

sort命令的功能是对文件内容进行排序,默认是数组在前,字母在后;小写在前,大写在后。

sort [选项] 文件

常见的选项:

选项 功能
-b 忽略每行的空格字符
-f 忽略字母大小写
-n 根据数值大小进行排序
-o 将排序结果写入指定文件
-u 去除排序,重复的内容只显示一行

4. uniq命令 – 去除文件中的重复内容行

uniq命令来自英文单词unique的缩写,功能是去除文件中的重复内容行。通常和sort命令结合使用,

uniq 选项 文件

常见的选项:

选项 功能
-c 统计每行的重复次数,并作为该行的前缀显示,连续重复的行会合并显示
-d 显示连续重复的行,只显示一次
-u 显示不连续重复的行

5. tr命令 – 字符转换工具

tr命令来自英文单词transform的缩写,功能是转换字符,包括替换、删除、压缩等,默认是替换操作。但是只能够从标准输入中读取文本内容,需要与管道符或输入重定向操作符搭配使用。

tr命令通常需要两组字符,第一组字符是会被替换的字符,第二组字符是被替换成的字符。工作原理是:第一组的第一个字符将被第二组的第一个字符替换,第一组中第二个字符会被第二组中的第二个字符替换,依此类推。因此两个字符的长度最好保持一致。如果两个字符长度不一致,那么可以使用-t选项进行长度截断。

tr [选项] 字符1 字符2

常见的选项:

选项 功能
-c 取反替换,将不在字符1中的字符替换成字符2
-d 删除字符1中出现的字符
-s 连续重复出现的字符仅显示一次
-t 将字符1截断至字符2的长度

6. cut命令 – 按列提取文件内容

cut命令的功能是按列提取文件内容。

cut [选项] 文件

常见的选项:

选项 功能
-b 以字节为单位进行截取
-c 以字符为单位进行截取
-d 设置分隔符
-f 显示指定的列

7. 常见应用操作

  1. 统计当前主机的连接状态。

    ss -antp | grep -v "^State" | cut -d ' ' -f 1 | sort | uniq -c
    
  2. 统计Nginx服务访问日志当中出现的IP地址次数。

    cat /var/log/nginx/access.log | cut -d ' ' -f 1 | sort | uniq -c
    

8. 常见正则表达式

正则表达式包括基本正则表达式和扩展正则表达式;基本正则表达式又叫做标准正则表达式,只支持最基本的元字符;扩展正则表达式支持更多的元字符。与基本正则表达式相比,扩展正则表达式不需要将一些表达式通过反斜杠进行转义。常见表达式如下所示:

表达式 功能
^ 匹配开端字符
$ 匹配末端字符
. 匹配除换行符外的任意字符
[] 匹配指定范围内的任意单个字符,可以使用连字符表示范围
[^] 匹配非指定范围内的任意单个字符
* 匹配前面字符出现任意次
.* 匹配任意长度字符
? 匹配前面字符出现0次或1次
+ 匹配前面字符最少出现1次
{n} 匹配前面字符出现n次
{n,} 匹配字符最少出现n次
{,n} 匹配前面字符最多出现n次
{m,n} 匹配前面字符最少出现m次,最多出现n次
\b 匹配单词边界
() 匹配分为一组的字符
| 表示多个正则表达式之间“或”的关系