Linux 正则表达式/三剑客之grep/find
2021/12/21 7:21:18
本文主要是介绍Linux 正则表达式/三剑客之grep/find,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux三剑客之grep
grep 一般用来筛选数据,是文本过滤器。筛选我们需要的数据,如果某文件的内容符合指定的范本样式,
格式:grep [参数] [匹配规则] [操作对象] 参数: -n 显示匹配出的文本内容在原文件中的行号 -o 只输出匹配内容 -q 静默输出,一般是用在脚本中 -->用echo$? 查看命令执行结果,返回0则执行成功,返回1执行失败 -c 显示匹配到的行数 -v 反向查找(显示不匹配的行,就是我们通常说的排除某些行,显示不包含匹配文本的所有行) - i 忽略大小写 -R -r 使用递归过滤 -l 只输出匹配到文本的文件名(如果匹配成功,只打印文件名,失败则不打印) -L 只输出未匹配到文本的文件名 -s 不显示不存在或无匹配文本的错误信息 -E 使用扩展正则(下面会讲什么是正则规则) grep -E = egrep -A 显示匹配到的数据及后n行 -A 2 -->匹配到的数据及后面2行 -B 显示匹配到的数据及前n行 -B 2 -->匹配到的数据及前面2行 -C 显示匹配到的数据及前后n行 -C 2 -->匹配到的数据及前后2行 wc: 匹配行数 -l 打印匹配的行数 -c 打印匹配的字节数
案例
1、要求过滤出/etc/passwd/中包含root的行及其行号 [root@judyju ~]# grep -n 'root' /etc/passwd 2、要求过滤出/etc/passwd/中包含root的行,只显示过滤到的内容 [root@judyju ~]# grep -o 'root' /etc/passwd 3、要求过滤/etc/passwd/中包含Root的行,忽略大小写 [root@judyju ~]# grep -i 'Root' /etc/passwd 4、要求匹配/etc/passwd/中mail所在的行以及前两行 [root@judyju ~]# grep -B 2 'mail' /etc/passwd 5、要求显示包含mail的行有多少行 [root@judyju ~]# grep -c 'mail' /etc/passwd 6、要求匹出在test.txt文件中包含judy的行 [root@judyju ~]# egrep '(judy)+' ./test.txt 7、要求找出/etc目录下,哪些文件包含root [root@judyju ~]# grep -R 'root' /etc 只显示文件的路径:[root@judyju ~]# grep -Rl 'root' /etc 8、计算/etc目录下包含root的文件有多少个 [root@judyju ~]# grep -c -R 'root' /etc | wc -l 9、过滤出当前主机包含的ip [root@judyju ~]# ip a | grep -o -E '([0-9]{1,3}\.){3}([0-9]{3})'
正则表达式
正则表达式是通过包含特殊意义的一些字符去适配各种匹配场景,可以用来检查一个串是否含有某种子串。在linux中分普通正则表达式和扩展正则表达式
普通正则表达式
* 匹配前一个字符(连续出现)0次或1次以上,-->当重复0次的时候,表示啥也没有,即匹配所有内容 . 点号,表示匹配任意一个且只有一个字符(换行符除外) .* 匹配所有内容 ^ 尖角号 以..开头 ^.* 组合符 匹配任意字符开头的行 $ 美元符 以..结尾 ^$ 表示空行 \ 转义字符 .*$ 以任意字符结尾 [] 中括号里的任意一个字符 [^] 取反 [a-z] 匹配[]内任意1个字母,即匹配任意一个小些字母 [A-Z] 匹配[]内任意1个字母,即匹配任意一个大写字母 [0-9] 匹配[]内任意1个数字 () 分组,组成一个整体,另外()的内通可以被后面的\n引用,n为数字表示第几个括号里的内容。 \n 表示第几个分组,引用前面()里的内容
案例
1、要求输出/etc/nginx/nginx.conf中不是以#开头的行 [root@judyju ~]# grep -v '^#' /etc/nginx/nginx.conf # grep "^[^#]" /etc/nginx/nginx.conf 2、要求输出1题文件中2后面有任意数量的任意字符的行 [root@judyju ~]# grep '2.*' /etc/nginx/nginx.conf
扩展正则表达式
egrep 等价于 grep -E(前文已提及)
常见的扩展正则表达式特殊字符如下:
+ 匹配前一个字符1次或1次以上 [:/]+ 匹配括号内的:或/一次或一次以上 ? 匹配前一个字符0次或者1次 | 管道符 表示或者,竖线两边是一个整体 {n} 匹配n次 {n,m} 匹配n到m次 {n,} 匹配n或更多次 {,n} 最多匹配n次
案例
1、匹配一个或多个2 [root@judyju ~]# egrep '2+' /etc/nginx/nginx.conf 2、匹配出2个4 [root@judyju ~]# egrep '4{2}' /etc/nginx/nginx.conf 3、匹配出包含2或者44的行 [root@judyju ~]# egrep '2|44' /etc/nginx/nginx.conf 4、要求将/etc/fstab中去掉包含#开头的行,且要求#后面至少有一个空格 [root@judyju ~]# egrep -v '^#\ +' /etc/fstab 5、找出文件中至少有一个空格的行 [root@judyju ~]# egrep '\ +' /etc/fstab 6、将nginx.conf文件中以#开头的行和空行,全部剔除 [root@judyju ~]# egrep -v '\ *^#|^$' /etc/fstab
find命令
根据文件的名称或者属性查找文件
格式:find [查找范围] [参数]
参数:
-name 按照文件的名字查找文件 * 通配符 -iname 按照文件的名字查找文件(忽略大小写) -size 按照文件的大小查询文件 + (加号) 大于 _ (减号) 小于 没符号 等于 -mtime 按照修改时间去查询 + (加号)n天以前 _ (减号)n天以内 -mtime 按照修改时间查询 -atime 按照访问时间查询 -ctime 按照属性时间查询 -user 按照用户的属主查询 -group 按照用户的属组查询 -type 按照文件的类型查询 -perm 按照文件的权限查询 -inum 按照文件的index node号码查询 -a 并且 -o 或者 -maxdepth 查询的目录深度(必须放在所有参数的第一位) -exec 将find处理好的结果交给其他命令继续处理
补充:
dd 生成文件 if 从......开始读 of 写入到.....文件 bs 每次写入多少内容 count 写入多少行 xargs 把处理的文本变成以空格分割的一行 `` 反引号 提前执行命令,然后将结果交给其他命令来处理
案例
1、查询/etc目录下hosts文件 [root@judyju ~]# find /etc/ -name 'hosts' 2、查询/etc目录下名称中包含hosts文件 [root@judyju ~]# find /etc/ -name '*hosts*' 3、要求将/etc目录下,所有的普通文件打包压缩到/tmp目录下 [root@judyju ~]# tar czPf /tmp/etcv2.tar.gz `find /etc/ -type f | xargs` tar czPf -->打包压缩命令 /tmp/etcv2.tar.gz 打包压缩好要放的路径 find 后面的是以类型寻找并且通过xargs转成以空格隔开的一行
这篇关于Linux 正则表达式/三剑客之grep/find的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法