find,grep和正则表达式
一、find
1.作用
find命令是根据文件的名称或者属性来查找文件
2.语法格式
find [查找范围] [参数]
3.常用参数(可独立使用)
序号 | 查找的根据 | 参数 | 补充说明 |
---|---|---|---|
1 | 文件名 | -name | 可以结合通配符使用 * |
2 | 文件名(忽略大小写) | -iname | 可以结合通配符使用 * |
3 | 文件大小 | -size | +大于。-小于。没符号,等于。 |
4 | 修改时间 | -mtime | +(可以省略),n天以前。-,n天以内 |
5 | 访问时间 | -atime | - |
6 | 属性修改时间 | -ctime | - |
7 | 用户属性 | -user | - |
8 | 用户组属性 | -group | - |
9 | 文件类型 | -type | - |
10 | 文件的权限 | -perm | - |
11 | index node | -inum | - |
4.辅助参数(必须配合其他参数才能使用)
序号 | 功能 | 参数 | 补充说明 |
---|---|---|---|
1 | 并且 | -a | 可省略,默认是并且 |
2 | 或者 | -o | - |
3 | 查询的目录深度 | -maxdepth | 需放在第一个参数位 |
4 | 将find的处理好的结果交给其他命令继续处理 | -exec | - |
5.案例
1.案例1:查询/etc目录下hosts文件
[root@localhost ~]# find /etc/ -name 'hosts'
/etc/hosts
2.案例2:查询/etc目录下名称中包含hosts文件
[root@localhost ~]# find /etc/ -name '*hosts*'
3.案例3:要求把/etc目录下,所有的普通文件打包压缩到/tmp目录
[root@localhost /tmp]# tar -czPf /tmp/etcv2.tar.gz `find /etc/ -type f | xargs`
6.知识拓展
1.| : 前面一个命令的结果交给后面一个命令处理
2.xargs : 把处理的文本变成以空格分割的一行
3.`` : 提前执行命令,然后将结果交给其他命令来处理
4.dd : 生成文件
if :从什么地方读
of : 写入到什么文件
bs : 每次写入多少内容
count : 写入多少次
二、grep
1.解释说明
grep是Linux三剑客之一,是文本过滤器(根据文本内容过滤文件)
2.语法格式
grep [参数] [匹配规则] [操作对象]
3.参数
序号 | 功能 | 参数 |
---|---|---|
1 | 过滤文本时,将过滤出来的内容在文件内的行号显示出来 | -n |
2 | 匹配成功后,将匹配行及匹配行的之后n行显示出来 | -A |
3 | 匹配成功后,将匹配行及匹配行之前的n行显示出来 | -B |
4 | 匹配成功后,将匹配行及前后的各n行显示出来 | -C |
5 | 只显示匹配成功的行数 | -c |
6 | 只显示匹配成功的内容 | -o |
7 | 反向过滤 | -v |
8 | 静默输出 | -q |
9 | 忽略大小写 | -i |
10 | 匹配成功后,将文本的名称打印出来 | -l |
11 | 递归匹配 | R/-r |
12 | 使用拓展正则 | -E |
4.案例
# 在/etc目录下,有多少个文件包含root
grep -rl 'root' /etc/ | wc -l
三、正则表达式
1.正则表达式的定义
利用一些特殊符号的组合去字符串中筛选出符合条件的数据
2.正则表达式的分类
普通正则表达式,拓展正则表达式
2.普通正则表达式
功能 | 表达式 | |
---|---|---|
1 | 以某字符开头 | ^ |
2 | 以某字符结尾 | $ |
3 | 匹配除换行符之外的任意单个字符 | . |
4 | 匹配前导字符的任意个数 | * |
5 | 某组字符串的任意一个字符 | [] |
6 | 取反 | [^] |
7 | 匹配小写字母 | [a-z] |
8 | 匹配大写字母 | [A-Z] |
9 | 匹配字母 | [a-zA-Z] |
10 | 匹配数字 | [0-9] |
11 | 取消转义 | \ |
12 | 分组 | () |
13 | 代表第n个分组 | \n |
3.拓展正则表达式
序号 | 功能 | 表达式 |
---|---|---|
1 | 匹配n次 | |
2 | 至少匹配n次 | |
3 | 匹配n到m次 | |
4 | 最多匹配m次 | |
5 | 匹配至少1个前导字符 | + |
6 | 匹配1个或者0个前导字符 | ? |
7 | 或 | | |
*{}代表匹配的次数
4.案例
案例1:在/etc/passwd文件中,匹配以ftp开头的行
grep '^ftp' /etc/passwd
案例2:在/etc/passwd文件中,匹配以bash结尾的行
grep 'bash$' /etc/passwd
案例3:匹配本机中有哪些ip
ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
案例4:要求将/etc/fstab中的去掉包含 # 开头的行,且要求 # 后至少有一个空格
grep -vE '^#\ +' /etc/fstab
案例5:找出文件中至少有一个空格的行
grep -E '\ +' xxx
案例6:将 nginx.conf 文件中以#开头的行和空行,全部删除
grep -vE '^\ *#|^$' /etc/nginx/nginx.conf