find和grep命令的简单使用

find和grep命令的简单使用

一、find

find 命令在指定的目录下查找对应的文件。

shell 复制代码
find [path] [expression]

● path 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。

● expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

常用可选参数:

  1. -name pattern:按文件名查找,支持使用通配符 * 和 ?。
  2. -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
  3. -size [±]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
  4. -mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
  5. -user username:按文件所有者查找。
  6. -group groupname:按文件所属组查找。
  7. -amin n:查找在 n 分钟内被访问过的文件。
  8. -atime n:查找在 n*24 小时内被访问过的文件。
  9. -cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
  10. -ctime n:查找在 n*24 小时内状态发生变化的文件(例如权限)。
  11. -mmin n:查找在 n 分钟内被修改过的文件。
  12. -mtime n:查找在 n*24 小时内被修改过的文件。

例子--不同条件查找

  1. 查找 /home 目录下大于 1MB的文件
shell 复制代码
find /home -size +1M
  1. 查找 /home 目录下小于1MB的文件
shell 复制代码
find /home -size -1M
  1. 查找 /etc 目录下 在7天前修改过的文件(不包含文件目录)
shell 复制代码
find /etc -mtime +7 -type f 
  1. 查找 / 下及其字目录的所有文件后缀为 .c的文件
shell 复制代码
find / -name "*.c"
  1. 查找 /home及其子目录下文件类型为目录的文件
shell 复制代码
find /home -type d 
  1. 查找robin用户所拥有的文件中以txt结尾的文件
shell 复制代码
find -user robin -name "*.txt"

二、grep

grep命令在文本文件中查找指定模式的词或短语,然后在标准输出设备上显示包括给定字符串模式的所有行。

grep -E 等同于 egrep , 使用扩展的正则表达式模式进行搜索

grep -F 等同于 fgrep ,字符串快速检索不支持正则表达式

shell 复制代码
 grep [选项]... PATTERN [FILE]...

● pattern - 表示要查找的字符串或正则表达式。

● files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。

常用选项:

● -i:忽略大小写进行匹配。

● -v:反向查找,只打印不匹配的行。

● -n:显示匹配行的行号。

● -r:递归查找子目录中的文件。

● -l:只打印匹配的文件名。

● -c:只打印匹配的行数。

● -x : 只显示整个行都严格匹配的行

● -E 将查找模式解释成扩展的正则表达式

● -F 将查找模式解释成单纯的字符串

正则表达式的简单说明

正则表达式(简称 "regex")是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。

组合 说明
[abc] 匹配中括号中的所有字符
[a-z] 匹配中括号中的字符范围内的所有字符
[^abc] 匹配除中括号中的字符外的所有字符
* 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式的一次或多次
匹配前面的子表达式零次或一次
. 代表任意一个字符
$ 匹配输入字符串的结束位置,以...结尾
^ 匹配输入字符串的起始位置,以...开头
{n} 匹配确定的n次
{n,} 至少匹配n次
{n,m} 最少匹配n次最多匹配m次

例子--简单文本查找

首先,在当前目录下创建一个文件,用于grep命令的练习

text 复制代码
vi a.txt
Albania
Algeria
Canada
0
1
3
11
  1. grep 对于 匹配的字符串区分大小写

  2. "." 只匹配一次任意字符

这里第二次匹配,因为没有添加严格限制选项,它依然匹配到了内容,加上严格限制以后得出了正确的结果。

  1. "+" 与 "?" 和 ""的区别
    "+" 代表匹配前面的子表达式一次或多次 ; " ?"相当于占位符,匹配前面的子表达式零次或一次; "
    "代表匹配前面的子表达式任意次。

这里的话,有一个问题就是多个正则表达式的特殊字符,需要使用 -E 开启正则表达式匹配模式,否则的话会出现找不到的问题。

例子--结合管道进行查找

  1. 查找根目录下的所有s开头的文件及目录
shell 复制代码
ls / | gerp -E ^s
  1. 查找/home目录下不是以数字结尾的文件及目录
shell 复制代码
ls /home | grep -v -E [0-9]$
  1. 查找/etc/passwd 中的以 user开头的账号信息
shell 复制代码
cat /etc/passwd | grep -E ^user*    # 看起来貌似直接使用grep不用管道也行
# 等同于 grep -E ^user* /etc/passwd
相关推荐
suijishengchengde3 小时前
****LINUX时间同步配置*****
linux·运维
willhuo4 小时前
基于xray的匿名、授权、IP白名单代理访问研究
服务器·网络·tcp/ip
qiuqyue4 小时前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
切糕师学AI4 小时前
Linux 操作系统简介
linux
南烟斋..4 小时前
GDB调试核心指南
linux·服务器
爱跑马的程序员5 小时前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
像风一样自由7 小时前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
oMcLin7 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
Qinti_mm7 小时前
Linux io_uring:高性能异步I/O革命
linux·i/o·io_uring
优雅的38度7 小时前
linux环境下,使用docker安装apache kafka (docker-compose)
linux·架构