find和grep命令的简单使用

简介: 这篇文章介绍了Linux中find和grep命令的基本使用,包括find命令的查找文件功能和grep命令的文本搜索功能,以及正则表达式的简单说明和应用实例。

一、find

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

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

二、grep

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

grep -E 等同于 egrep , 使用扩展的正则表达式模式进行搜索
grep -F 等同于 fgrep ,字符串快速检索不支持正则表达式

 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命令的练习

vi a.txt
Albania
Algeria
Canada
0
1
3
11
  1. grep 对于 匹配的字符串区分大小写
    在这里插入图片描述

  2. “.” 只匹配一次任意字符
    在这里插入图片描述

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

  1. “+” 与 “?” 和 “”的区别
    “+” 代表匹配前面的子表达式一次或多次 ; “ ?”相当于占位符,匹配前面的子表达式零次或一次; “
    ”代表匹配前面的子表达式任意次。
    在这里插入图片描述

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

在这里插入图片描述

例子–结合管道进行查找

  1. 查找根目录下的所有s开头的文件及目录
ls / | gerp -E ^s

在这里插入图片描述

  1. 查找/home目录下不是以数字结尾的文件及目录
ls /home | grep -v -E [0-9]$

在这里插入图片描述

  1. 查找/etc/passwd 中的以 user开头的账号信息
cat /etc/passwd | grep -E ^user*    # 看起来貌似直接使用grep不用管道也行
# 等同于 grep -E ^user* /etc/passwd

在这里插入图片描述

相关文章
|
6月前
|
Linux
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
123 1
认识Linux指令之 “find grep” 命令
|
6月前
|
Unix
grep的基本用法
grep的基本用法
53 2
|
监控 Shell Linux
Linux命令find和grep详解
find 查找文件 grep 查找文件内容中的字符串。
386 0
|
运维 大数据 Linux
【精通Linux系列】inux核心数据处理查找命令之find,cut,awk, sed命令用法
【精通Linux系列】inux核心数据处理查找命令之find,cut,awk, sed命令用法
197 0
【精通Linux系列】inux核心数据处理查找命令之find,cut,awk, sed命令用法
|
机器学习/深度学习 Shell