Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)
发布时间 - 2025-07-15 00:00:00 点击率:次在linux中,正则表达式和字符串的查询、替换工具如tr、diff、wc和find等,是处理文本和文件的强大工具。本文将详细介绍这些工具的使用方法和正则表达式的基本概念。
正则表达式
正则表达式(Regular Expression),简称regex、regexp或RE,是一种用于描述和匹配符合特定语法规则的字符串的工具。正则表达式可以用于检查字符串是否包含特定子串、替换匹配的子串或从字符串中提取符合条件的子串。在文本编辑器中,正则表达式常用于搜索和替换符合特定模式的文本。
正则表达式分为基本正则表达式和扩展正则表达式。
元字符是指在正则表达式中具有特殊意义的字符。
01
基本正则表达式
字符匹配

| # | 元字符 | 含义 |
|---|---|---|
| 1 | . | 匹配单个任意字符 |
| 2 | [a-z] | 字符范围,匹配a-z内的任意字符 |
| 3 | [^a-z] | 匹配a-z之外的任意字符 |
次数匹配
| # | 元字符 | 含义 |
|---|---|---|
| 1 | * | 匹配0或任意多个单字符,一般结合 . 使用 |
| 2 | \? | 匹配前面的字符0次或1次,即前面的字符可有可无 |
| 3 | + | 匹配前面的字符至少一次,即前面的字符至少出现一次 |
| 4 | x{n} | 精确匹配 x 出现次数为 n |
| 5 | x{n,} | 匹配 x 出现次数至少为 n |
| 6 | x{n,m} | 匹配 x 出现次数在 n,m 之间 |
位置匹配
| # | 元字符 | 含义 |
|---|---|---|
| 1 | ^ | 只匹配行首 |
| 2 | $ | 只匹配行尾 |
| 3 | 锚定词首,用于单词的最左侧 | |
| 4 | > | 锚定词尾,用于单词的最右侧 |
分组及引用
| # | 元字符 | 含义 |
|---|---|---|
| 1 | ( ) | 将一个或多个字符捆绑在一起,当做一个整体 |
| 2 | \1,\2,\3... | 向后引用前面被匹配到的第1个、第2个,第3个... |
1、过滤 /etc/passwd 中以s或S开头的行
grep "^[sS]" /etc/passwd
2、过滤 /etc/passwd中不以小写字母开头的行
grep "^[^a-z]" /etc/passwd
3、过滤 /etc/passwd 中以nologin结尾的行
grep "nologin$" /etc/passwd
4、过滤 /etc/passwd 中以空格开头的行
grep "^ " /etc/passwd
5、过滤 /etc/passwd 中的空行
grep "^$" /etc/passwd
6、过滤 /etc/passwd 中以r开头的行,r后面可以跟0个或任意多个o(也就是说这行的第一个字符必须是r,这行还可以有0个或任意个o)
grep "^ro*" /etc/passwd
7、过滤 /etc/passwd 中以r开头的行,r后面必须跟1个或1个以上的字符(也就是这行第一个字符必须是r,而且这行必须还有其他字符,空格也算字符)
grep "^r." /etc/passwd
8、过滤 /etc/passwd 中r后跟了任意字符,任意字符后跟了 h 的行 (也就是这一行必须得有r和h,而且h必须在r的后面)
grep "r.*h" /etc/passwd
9、过滤/etc/passwd 中,包含 root 单词的行,并且root不和其他字符相邻(空格不算)
grep "\" /etc/passwd
10、过滤 /etc/passwd 中 r后跟了o o出现0次或者1此的行
grep "ro\?" /etc/passwd
11、过滤 /etc/passwd 中 r后跟了o o出现至少一次的行
grep "ro\+" /etc/passwd
12、过滤 /etc/passwd 中, r后跟了o,o只出现2次的行
grep "ro\{2\}" /etc/passwd13、过滤 /etc/passwd 中, r 后跟了o ,o出现至少1次至多2次的行
grep "ro\{1,2\}" /etc/passwd14、 过滤 /etc/passwd中,r后跟了o, o 至少出现2次的行
grep "ro\{2,\}" /etc/passwd
02
扩展正则表达式
扩展正则表达式使用 egrep 或者 grep -E
| # | 元字符 | 含义 |
|---|---|---|
| 1 | ? | 匹配紧挨在前面的字符 0 次或 1 次 |
| 2 | {m,n} | 匹配紧挨着前面的字符至少 m 次,至多 n 次 |
| 3 | + | 至少匹配前面的字符一次 |
| 4 | a | b |
| 5 | () | 分组 |
1、匹配 /etc/passwd 中r后紧跟了o,o出现0次或者1次的行
egrep "ro?" /etc/passwd
2、匹配 /etc/passwd 中r后紧跟了o,o出现至少1次至多2次的行
egrep "ro{1,2}" /etc/passwd3、匹配 /etc/passwd 中r后紧跟了o,o出现至少1次的行
egrep "ro+" /etc/passwd
4、匹配 /etc/passwd 中出现root或者halt的行
egrep "root|halt" /etc/passwd
5、匹配 /etc/passwd 中出现root on或者halt failed的行
egrep "(root on|halt failed)" /etc/passwd
Linux中grep工具的使用
tr
| # | 命令 | 含义 |
|---|---|---|
| 1 | tr set1 set2 | 用 set2 的字符替换 set1 |
| 2 | tr -d set1 | 删除 set1 中指定的字符 |
| 3 | tr -s set1 | 压缩 set1 中指定的字符 |
| 4 | tr -s set1 set2 | 用 set2 的字符替换 set1 ,然后压缩 set2 中指定的字符 |
| 5 | tr -ds set1 set2 | 先删除 set1 的字符,再压缩 set1 中的字符 |
例如:tr 'A-Z' 'a-z' 将 A-Z 的大写字符全部替换成 a-z 的小写字符。
tr 'A-Z' 'a-z' passwd2
将passwd中 A-Z 的大写字符全部替换成 a-z 的小写字符,然后写入到 passwd2 中。
diff
diff passwd passwd2
比较两个文件的不同。这里表示文件passwd和文件passwd2第2行、第4、5行和第7行都不同,并且分别打印出文件1和文件3的第2、4 、5、7 行。
diff passwd passwd2 > diff.path
将 passwd 和 passwd2 的不同写入到 diff.path文件中。
patch -b passwd2 diff.path
用 diff.path文件修改 passwd2 中的不同,最后得到的 passwd2 文件和 passwd 文件一模一样。
du
du:查看目录或文件占用大小
- 不加参数时,显示当前文件夹下的所有文件夹的磁盘使用情况(包括递归文件夹内的文件夹)
- -a 给指定文件夹内的所有文件显示磁盘使用情况( 包括层层递归文件 )
- -s 仅显示总计,即当前目录的大小
- -h 以人性化方式显示
du -sh /tmp/test 或者 du -sh /tmp/test/
显示test文件夹的占用大小。
du -sh /tmp/test/*
显示test文件夹内的所有文件和文件夹的占用大小 (不包括递归文件)。
du -ah /tmp/test
显示test文件夹内的所有文件的占用大小(包括递归文件)。
wc
wc:统计文件中的数据
- -l 统计行数
- -c 统计字节数
- -w 统计字数
- -m 统计字符数
统计文件夹内文件的个数:
ls -l | grep "^-" | wc -l
统计文件夹内包括递归文件的个数:
ls -lR | grep "^-" | wc -l
统计文件夹内文件夹的个数:
ls -l | grep "^d" | wc -l
统计文件夹内包括递归文件夹的个数:
ls -lR | grep "^d" | wc -l
find
find:查找文件或文件夹
根据文件名查找:
find /tmp -name abc
查找/tmp目录下名字叫做abc的文件,它会遍历tmp目录下的所有文件及文件夹。
根据文件大小查找:
find /tmp -size -1M
+号表示大于,-号表示小于。
- -name 通过文件名查找
- -size 通过文件大小查找
- -type 通过文件类型查找
- -user 通过文件用户查找
- -perm 通过权限查找
因为find对管道支持比较弱,所以可以借助exec扩展选项:
find /etc -size +1M -exec ls -lh {} \;{}代表find查找到的内容。
find /etc -size +1M -exec cp {} /tmp/test/ \;find命令按时间查找文件:
find /etc -atime 3
查找/etc目录三天之内查看过的文件。
find /etc -mtime -3
查找/etc目录三天之内修改过的文件。
find /etc -mtime +3
查找三天前修改过的文件。
find /etc -type f -newermt '2014-1-1 00:00:00' ! -newermt '2015-1-1 00:00:00'
查找在2014-1-1 00:00:00和 2015-1-1 00:00:00 之间的文件。
如果想跟我一起讨论,那快加入我的知识星球吧!
相关文章:
- Linux中sed工具的使用
- Linux中grep工具的使用
- Linux中awk工具的使用
# linux
# 工具
# ai
# 正则表达式
# 字符串
# 递归
# Regex
# regexp
# tr
# 跟了
# 中以
# 多个
# 这行
# 第一个
# 替换成
# 之内
# 是一种
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
java ZXing生成二维码及条码实例分享
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
简单实现Android文件上传
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
C++时间戳转换成日期时间的步骤和示例代码
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
zabbix利用python脚本发送报警邮件的方法
制作企业网站建设方案,怎样建设一个公司网站?
香港服务器部署网站为何提示未备案?
如何在阿里云服务器自主搭建网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
WEB开发之注册页面验证码倒计时代码的实现
浅谈Javascript中的Label语句
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel如何使用Collections进行数据处理?(实用方法示例)
phpredis提高消息队列的实时性方法(推荐)
Bootstrap整体框架之JavaScript插件架构
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
iOS正则表达式验证手机号、邮箱、身份证号等
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何快速辨别茅台真假?关键步骤解析
如何在阿里云虚拟服务器快速搭建网站?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
在线教育网站制作平台,山西立德教育官网?
如何用JavaScript实现文本编辑器_光标和选区怎么处理
如何做网站制作流程,*游戏网站怎么搭建?
Java垃圾回收器的方法和原理总结
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何实现一对一模型关联?(Eloquent示例)
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
怎样使用JSON进行数据交换_它有什么限制
简历没回改:利用AI润色让你的文字更专业
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
如何确保西部建站助手FTP传输的安全性?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
如何在宝塔面板中修改默认建站目录?
Laravel怎么在Controller之外的地方验证数据
下一篇:如何查询站长工具移动排名
下一篇:如何查询站长工具移动排名

