首页 > 运维 > linux运维 > 正文

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

看不見的法師
发布: 2025-07-15 10:12:32
原创
1004人浏览过

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 "\<root\>" /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)

Find JSON Path Online
Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30
查看详情 Find JSON Path Online

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工具的使用

以上就是Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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