Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)
目录
正则表达式
正则表达式,又称正规表示法、常规表示法( Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
正则表达式分为 基本正则表达式 和 扩展正则表达式。
元字符就是指那些在正则表达式中具有特殊意义的专用字符
基本正则表达式
字符匹配
| 元字符 | 含义 |
|---|---|
| . | 匹配单个任意字符 |
| [a-z] | 字符范围,只匹配a-z内的任意字符 |
| [ ^a-z] | 匹配a-z之外的任意字符 |
次数匹配
| 元字符 | 含义 |
|---|---|
| * | 匹配0或任意多个单字符,一般结合 . 使用 |
| \? | 匹配前面的字符0次或1次,即前面的字符可有可无 |
| \+ | 匹配前面的字符至少一次,即前面的字符至少出现一次 |
| x\{n\} | 精确匹配 x 出现次数为 n |
| x\{n,\} | 匹配 x 出现次数至少为 n |
| x\{n,m\} |
匹配 x 出现次数在 n,m 之间 |
位置匹配
| 元字符 | 含义 |
|---|---|
| ^ | 只匹配行首 |
| $ | 只匹配行尾 |
| \< | 锚定词首,用于单词的最左侧 |
| \> | 锚定词尾,用于单词的最右侧 |
分组及引用
| 元字符 | 含义 |
|---|---|
| \( \) | 将一个或多个字符捆绑在一起,当做一个整体 |
| \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
扩展正则表达式
扩展正则表达式使用 egrep 或者 grep -E
| 元字符 | 含义 |
|---|---|
| ? | 匹配紧挨在前面的字符 0 次或 1 次 |
| {m,n} | 匹配紧挨着前面的字符至少 m 次,至多 n 次 |
| + | 至少匹配前面的字符一次 |
| a|b | 匹配 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
grep
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 中的字符 |
eg: tr 'A-Z' 'a-z' < passwd 将passwd中 A-Z 的大写字符全部替换成 a-z 的小写字符,但是并不会改变passwd中的数据
tr 'A-Z' 'a-z' < passwd > 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 / -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:00和 2015-1-1 00:00:00 之间的文件

相关文章:Linux中grep工具的使用
Linux中正则表达式和字符串的查询、替换(tr/diff/wc/find)的更多相关文章
- linux中sort、uniq、cut、tr、wc命令的使用
文本处理命令 1.sort命令 使用场景 : 用于将文件内容加以排序(可以和cat一起用) 参数 作用 -n 依照数值的大小排序 -r 以相反的顺序来排序(默认只比较第一个数,-rn是按所有数值比较) ...
- 07: linux中正则表达式与grep使用
1.1 linux中正则表达式 1.^linux 以linux开头的行 2.$php 以php结尾的行 3.. 匹配任意单字符 4..+ ...
- 11、Linux基础--sort、uniq、cut、tr、wc、流处理工具sed
笔记 1.晨考 1.写出过滤手机号的正则表达式 1[0-9]{10} 2.写出过滤邮箱的正则表达式 chenyang@123.com [a-zA-Z0-9-_]+@[a-z0-9]+\.(com|cn ...
- 在Linux中批量修改字符串的命令
昨天一个朋友忽然问我,在Linux下如何批量修改字符串,当时瞬间懵逼了,完全想不起来....... 今天特意的重温了一下Linux下的一些常用命令,并将这个遗忘的批量修改字符串的命令记录下来(资料来自 ...
- linux中shell截取字符串方法总结
截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=wo ...
- node中转换URL字符串与查询字符串
一个完整的URL字符串中,从"?"(不包括?)到"#"(如果存在#)或者到该URL字符串结束(如果不存在#)的这一部分称为查询字符串. 可以使用Query St ...
- SQLServer如何删除字段中的某个字符串,或者替换为空格?
sql="update Table set 字段=REPLACE ( 字段,'123' , ' ') where XXX条件"把字段中123替换为空格
- Linux中命令别名alias与命令替换
当我们使用bash进行一些操作的时候,希望一些较为长的命令使用一些短的命令即可完成输入运行的话,我们就可以使用alias命令别名来帮助我们完成这个任务 alias作为一个bash的内置命令,具有一定的 ...
- linux 中 ll 命令如何让查询结果按时间升序或降序排序?
-t选项的功能是使输出的结果将以时间降序排列.如果希望按时间的升序排列,可以使用管道符将返回的结果传入tac命令.用法示例:查询当前目录的文件并以降序排列: ll -t查询当前目录的文件并以升序排列: ...
随机推荐
- Java并发编程之并发关键字
volatile 保证可见性 一个线程修改volatile变量的值时,该变量的新值会立即刷新到主内存中,这个新值对其他线程来说是立即可见的 一个线程读取volatile变量的值时,该变量在本地内存中缓 ...
- LayUi表单模块无法正常显示
问题: 当我们再使用LayUI的Form表单模块时,我们会把自己需要的表单赋值到我们的页面中,但是会出现无法正常显示的问题,如下: 出现原因: LayUI官方文档也明确表示:"当你使用表单时 ...
- 攻防世界 resver catch-me
catch-me asis-ctf-quals-2016 附件给了个压缩包文件,重命名,解压,获取到elf文件 程序有两处关键比较 第一处: 这里进行动态调试,得到v3=0xB11924E1, byt ...
- restful设计风格
restful是一种软件设计风格,并不是标准,它只是提供了一组设计原则和约束条件. ① restful 提倡面向资源编程,url接口尽量要使用名词,不要使用动词 ② 在url中可以体现版本号 ③可以根 ...
- 初识Django(一)
首先安装Django 1 pip install django==1.11.13 安装 由于django最新的长期支持版本为1.11.x,所以我们安装最新的1.11.13版本 '=='后面跟版本号 安 ...
- Windows + Jenkins + .NetFramework + SVN 持续部署
Windows + Jenkins + .NetFramework + SVN 持续部署 环境准备 服务端环境 安装 Windows 服务器 1.阿里云购买临时服务器 阿里云:https://www. ...
- Python基础之数据类型详解
为什么会有数据类型? 在介绍具体的数据类型之前,需要了解为什么需要区分数据类型.我们知道,一个公司会有很多个大的部门,每个部门下又会有许多细分的小部门,构成了公司的完整体系结构.如果把python的数 ...
- Kubernetes 用户流量接入方案
总结Kubernetes 生产环境用户流量接入方案 方案1 client -> ddos -> waf -> slb 7层域名 -> nginx端口 -> ingress ...
- [模拟]P1047 校门外的树
校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,- ...
- 一文搞懂MySQL体系架构!!
写在前面 很多小伙伴工作很长时间了,对于MySQL的掌握程度却仅仅停留在表面的CRUD,对于MySQL深层次的原理和技术知识了解的少之又少,随着工作年限的不断增长,职场竞争力却是不断降低的.很多时候, ...