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
相关推荐
赖small强3 小时前
Linux 系统调用在 ARM 上的实现与工作机制
linux·系统调用·内核态·用户态·上下文切换
面向星辰4 小时前
扣子开始节点和结束节点
java·服务器·前端
一匹电信狗4 小时前
【C++】封装红黑树实现map和set容器(详解)
服务器·c++·算法·leetcode·小程序·stl·visual studio
大锦终5 小时前
【Linux】网络层与数据链路层中重点介绍
linux·运维·服务器·网络
lht6319356125 小时前
从Windows通过XRDP远程访问和控制银河麒麟 v10服务器
linux·运维·服务器·windows
qiudaorendao6 小时前
作业11.9
linux·服务器·apache
阿豪学编程6 小时前
环境变量与程序地址空间
linux·运维·windows
秃秃秃秃哇6 小时前
X5的相机同步方案
linux
岚天start6 小时前
解决方案—K8S集群的日志按天并按照命名空间分类定时同步到日志服务器
服务器·docker·kubernetes·shell·日志备份
CaracalTiger7 小时前
本地部署 Stable Diffusion3.5!cpolar让远程访问很简单!
java·linux·运维·开发语言·python·微信·stable diffusion