0

0

Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

看不見的法師

看不見的法師

发布时间:2025-07-15 10:12:32

|

1018人浏览过

|

来源于php中文网

原创

linux中,正则表达式和字符串的查询、替换工具如tr、diff、wc和find等,是处理文本和文件的强大工具。本文将详细介绍这些工具的使用方法和正则表达式的基本概念。

正则表达式

正则表达式(Regular Expression),简称regex、regexp或RE,是一种用于描述和匹配符合特定语法规则的字符串的工具。正则表达式可以用于检查字符串是否包含特定子串、替换匹配的子串或从字符串中提取符合条件的子串。在文本编辑器中,正则表达式常用于搜索和替换符合特定模式的文本。

正则表达式分为基本正则表达式和扩展正则表达式。

元字符是指在正则表达式中具有特殊意义的字符。

01

基本正则表达式

字符匹配

# 元字符 含义
1 . 匹配单个任意字符
2 [a-z] 字符范围,匹配a-z内的任意字符
3 [^a-z] 匹配a-z之外的任意字符

Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

次数匹配

# 元字符 含义
1 * 匹配0或任意多个单字符,一般结合 . 使用
2 \? 匹配前面的字符0次或1次,即前面的字符可有可无
3 + 匹配前面的字符至少一次,即前面的字符至少出现一次
4 x{n} 精确匹配 x 出现次数为 n
5 x{n,} 匹配 x 出现次数至少为 n
6 x{n,m} 匹配 x 出现次数在 n,m 之间

Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

位置匹配

# 元字符 含义
1 ^ 只匹配行首
2 $ 只匹配行尾
3 锚定词首,用于单词的最左侧
4 > 锚定词尾,用于单词的最右侧

Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

分组及引用

# 元字符 含义
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/passwd

13、过滤 /etc/passwd 中, r 后跟了o ,o出现至少1次至多2次的行

grep "ro\{1,2\}" /etc/passwd

14、 过滤 /etc/passwd中,r后跟了o, o 至少出现2次的行

grep "ro\{2,\}" /etc/passwd

Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

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/passwd

3、匹配 /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中正则表达式和字符串的查询、替换(tr/diff/wc/find)

炉米Lumi
炉米Lumi

字节跳动推出的AI模型分享社区和模型训练平台

下载

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 行。

Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)

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中正则表达式和字符串的查询、替换(tr/diff/wc/find)

如果想跟我一起讨论,那快加入我的知识星球吧!

相关文章:

  • Linux中sed工具的使用
  • Linux中grep工具的使用
  • Linux中awk工具的使用

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

248

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

741

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

213

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

232

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

528

2023.12.06

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号