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

地球胖头鱼 2021-03-19
系统与内网安全 发布于 2021-03-19 11:47:00 阅读 784 评论 0

正则表达式

正则表达式,又称正规表示法、常规表示法( Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

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

元字符就是指那些在正则表达式中具有特殊意义的专用字符

基本正则表达式

字符匹配

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

次数匹配

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

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

位置匹配

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

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

分组及引用

元字符 含义
将一个或多个字符捆绑在一起,当做一个整体
\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)

扩展正则表达式

扩展正则表达式使用 egrep 或者 grep -E

元字符 含义
? 匹配紧挨在前面的字符 0 次或 1 次
{m,n} 匹配紧挨着前面的字符至少 m 次,至多 n 次
+ 至少匹配前面的字符一次
a b
() 分组
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)

tr 命令

命令 含义
tr set1 set2 用 set2 的字符替换 set1
tr -d set1 删除 set1 中指定的字符
tr -s set1 压缩 set1 中指定的字符
tr -s set1 set2 用 set2 的字符替换 set1 ,然后压缩 set2 中指定的字符
tr -ds set1 set2 先删除 set1 的字符,再压缩 set1 中的字符

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 文件一模一样

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 / -type -newermt ‘2018 ‘ ! -newermt ‘’

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:002015-1-1 00:00:00 之间的文件

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

原创:谢公子学安全

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
地球胖头鱼
未填写
  • 作者发布文章253
  • 作者收获粉丝11
  • 作者收到点赞4
  • 所有文章被收藏了6
  • 博客总访问量排行第2
  • 博客总访问量10.3 万(每日更新)
查看所有博文