第4章 Shell编程之正则表达式与文本处理器

正则表达式

概念

正则表达式(Regular Expression,常简写为regex、regexp或RE)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种模式匹配。

标准正则表达式

创建一个用于测试的文件

内容如下

bash 复制代码
he was short and fat.
he was weating 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.
PI=3.14
a wood cross!
Actions speak louder than words

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

grep命令相关选项

|---------|--------------------------------|
| 选项 | 说明 |
| -a | 不要忽略二进制数据 |
| -A | 除了显示符合范本样式的那一行之外,并显示该行之后的内容 |
| -b | 在显示符合范本样式的那一行之外,并显示该行之前的内容 |
| -c | 计算符合范本样式的行数 |
| -C 或 - | 除了显示符合范本样式的那一行之外,并显示该行之前和之后的内容 |
| -d | 当指定要查找的是目录而非文件时,必须使用这项参数 |
| -e | 指定字符串作为查找文件内容的范本样式 |
| -E | 将范本样式为延伸的普通表示法来使用(即使用扩展正则表达式) |
| -f | 指定范本文件,其内容有一个或多个范本样式 |
| -F | 将范本样式视为固定字符串的列表 |
| -G | 将范本样式视为普通的表示法来使用(默认) |
| -h | 在显示符合范本样式的那一列之前,不标示该列所属的文件名称 |
| -H | 在显示符合范本样式的那一列之前,标示该列的文件名称 |
| -i | 忽略字符大小写的差别 |
| -l | 列出文件内容符合指定的范本样式的文件名称 |
| -L | 列出文件内容不符合指定的范本样式的文件名称 |
| -n | 在显示符合范本样式的那一列之前,标示出该列的编号 |
| -q | 不显示任何信息 |
| -R 或 -r | 递归查找目录中的文件 |
| -s | 不显示错误信息 |
| -v | 反转查找(即只显示不匹配的行) |
| -w | 只显示全字符合的行 |
| -x | 只显示全列符合的行 |
| -y | 此参数效果跟"-i"相同(即忽略字符大小写的差别) |
| -o | 只输出文件中匹配到的部分 |

sed命令相关选项

|----|--------------------------------------------------|
| 选项 | 说明 |
| -n | 使用安静(silent)模式。只有经过sed特殊处理的行才会被列出来 |
| -e | 直接在命令列模式上进行sed的动作编辑 |
| -f | 直接将sed的动作写在一个文件内,-f filename则可以运行filename内的sed动作 |
| -r | sed的动作支持的是延伸型正规表示法的语法(默认是基础正规表示法语法) |
| -i | 直接修改读取的文件内容,而不是输出到终端 |

awk常见用法

|--------------------|----------------------------|
| 参数 | 说明 |
| 0 | 表示整个当前行 | | 1 | 每行第一个字段 |
| NF | 字段数量变量 |
| NR | 每行的记录号,多文件记录递增 |
| FNR | 与NR类似,不过多文件记录不递增,每个文件都从1开始 |
| \t | 制表符 |
| \n | 换行符 |
| FS | BEGIN时定义分隔符 |
| RS | 输入的记录分隔符,默认为换行符 |
| ~ | 匹配,与==相比不是精确比较 |
| !~ | 不匹配,不精确比较 |
| == | 等于,必须全部相等,精确比较 |
| != | 不等于,精确比较 |
| && | 逻辑与 |
| || | 逻辑或 |
| + | 匹配时表示1个或1个以上 |
| /[0-9][0-9]+/ | 两个或两个以上连续数字 |
| /[0-9][0-9]*/ | 一个或零个以上连续数字 |
| FILENAME | 当前输入文件的文件名 |
| OFS | 输出字段分隔符,默认为空格 |
| ORS | 输出的记录分隔符,默认为换行符 |
| -F'[:#/]' | 定义三个分隔符(冒号、井号和斜杠) |

sort命令相关选项

|----|----------------------|
| 选项 | 说明 |
| -f | 忽略大小写 |
| -b | 忽略每行前面的空格 |
| -M | 按照月份进行排序 |
| -n | 按照数字进行排序 |
| -r | 反向排序 |
| -u | 等同于uniq,表示相同的数据仅显示一行 |
| -t | 指定分隔符,默认使用[Tab]键分隔 |
| -o | 将排序后的结果转存至指定文件 |
| -k | 指定排序区域 |

uniq命令相关选项

|----|------------------------|
| 选项 | 说明 |
| -c | 进行计数,显示每行出现的次数 |
| -d | 仅显示重复行,即显示重复出现至少两次的行 |
| -u | 仅显示出现一次的行,等同于uniq命令的效果 |

tr命令相关选项

|----|---------------------|
| 选项 | 说明 |
| -c | 取代所有不属于第一字符集的字符 |
| -d | 删除所有属于第一字符集的字符 |
| -s | 把连续重复的字符以单独一个字符表示 |
| -t | 先删除第一字符集较第二字符集多出的字符 |

相关推荐
橙露28 分钟前
数据库运维核心:MySQL主从复制与读写分离的部署与维护
运维·数据库·mysql
Wpa.wk34 分钟前
Docker- 故障注入(混沌工程)测试(简单过程阐述)
linux·运维·分布式·测试工具·docker·容器
iFlow_AI43 分钟前
将iFlow CLI装进u盘,即插即用
linux·编辑器·vim·ai编程·u盘·iflow·iflow cli
wenzhangli743 分钟前
Ooder SuperAgent 实战指南:企业级AI能力分发与自动化协作框架
运维·人工智能·自动化
彷徨的蜗牛1 小时前
软件架构设计的灵魂:在权衡与约束中寻找最优解
运维·微服务·架构
宇钶宇夕1 小时前
CoDeSys入门实战一起学习(二十五):梯形图(LD)触点与线圈指令精讲及电机启停案例
运维·学习·自动化·软件工程
数研小生1 小时前
淘宝宝贝详情数据爬虫:单线程采集突破方案(多线程 / 多进程实战)
linux·运维·爬虫
释怀不想释怀1 小时前
Linux三剑客-sed
linux·运维·服务器
通知风来过1 小时前
docker下得dify得镜像站
运维·docker·容器
爱喝水的鱼丶1 小时前
SAP-ABAP:掌握BAPI_OUTB_DELIVERY_CONFIRM_DEC:解锁SAP自动化发货的核心钥匙
运维·学习·sap·abap·交流学习