首页 > 其他分享 >(find and grep)

(find and grep)

时间:2023-06-16 11:23:40浏览次数:31  
标签:文件 grep 目录 搜索 txt find

前言

大家好,我是 god23bin。欢迎来到《一分钟学一个 Linux 命令》系列,每天只需一分钟,记住一个 Linux 命令不成问题。今天需要你花两分钟时间来学习下,因为今天要介绍的是两个常用的搜索命令:find 和 grep 命令。

find

什么是 find 命令?

find 命令用于在指定的目录下搜索文件和目录。它提供了丰富的搜索条件和选项,可以根据文件名、文件类型、文件大小、修改时间等属性进行搜索。find 命令通常用于查找特定文件或根据条件进行批量操作。

find命令通常进行的是从根目录 / 开始的全盘搜索,所以不要在高峰时期使用 find 命令。

如何使用 find 命令?

find 命令的使用相对较复杂,但掌握了基本语法后,你就能灵活使用它。

基本语法:

find 目录路径 [选项参数] [搜索条件]
  • 目录路径:指定要查找的目录路径。
  • 选项参数:用于指定匹配条件,例如文件名、类型。
  • 搜索条件:用于指定要搜索的文件和目录,满足这个条件的就会被搜索出来。

举例说明

假设我们想找到在 /opt/games 目录下所有以 .txt 扩展名结尾的文件,则可以使用以下命令:

find /opt/games -name "*.txt"

这将在 /opt/games 目录及其子目录中搜索所有以 .txt 结尾的文件,并将它们列出。

如果要在当前目录及其子目录中查找所有以 .txt 结尾的文本文件,则可以使用以下命令:

find . -name "*.txt"

常用选项参数

  • -name:按文件名进行匹配。
  • -type:按文件类型进行匹配。
  • -size:按文件大小进行匹配。
  • -user:按文件所属用户进行匹配。
  • -mtime:(modified)按文件最后内容的修改时间进行匹配。
  • -perm:(permission)按文件权限进行匹配。
  • -exec:(execute)对搜索的结果执行命令。

例子

  1. 搜索 /home 目录及其子目录中包含 god23bin 结尾的目录和文件:
find /home -name "*god23bin*"

  1. 搜索 /opt/games 目录下的所有类型为目录的文件(注意:目录也是一种特殊的文件
find /opt/games -type d

-type 后面可以使用的类型:

  • d:目录
  • f:文件
  • l:符号链接(软链接)
  1. 查找 /boot 目录及其子目录下所有大小大于 1MB 的文件:
find /boot -size +1M

-size 后面的搜索条件写法:

  • -100c:小于 100B 的文件

  • +10k:大于 10KB 的文件

  • -5M:小于 5MB 的文件

  • +2G:大于 2GB 的文件

  • 以此类推,- 表示小于,+ 表示大于,或者直接指定大小

-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)

  1. 查找 /home 目录及其子目录下所有属于 god23bin 这个用户的文件(目录):
find /home -user god23bin

  1. 搜索 /opt 目录及其子目录下最近 7 天内发生过修改的文件(目录):
find /opt -mtime -7

-7 代表 7 天内,那么自然而然,+7 代表 7 天之前:

find /opt -mtime +7

-mtime [+-]days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。

按权限进行匹配

这里先说下,-perm 后面的内容使用数字或符号来表示文件权限,举个例子 /u+rw,这里的 /u 表示用户(所有者)权限,rw 表示具有读写权限,中间的 + 用来表示「具有」

还有其他几个字母:/g,组(group)权限;/o,(other)其他用户权限;/a,(all)所有用户权限。

读写可执行:r(read),w(write),x(execute)

- 表示没有:比如 /u-rw,指用户没有读写权限

  1. 搜索当前目录及其子目录下所有具有读写权限的文件(目录):
find /opt -perm /u+rw

  1. 搜索当前目录及其子目录下其他用户具有读写权限的目录:
find /opt -type d -perm /o+rw

对搜索的结果执行命令

-exec 选项参数可以对搜索到的结果执行特定的命令。

  1. 搜索 /opt/games/gta6 目录下的所有 txt 文件,将这些文件复制到 /opt/games/gta6/backup 目录下:
find /opt/games/gta6 -name "*.txt" -exec cp {} /opt/games/gta6/backup \;

注意:-exec 参数需要使用 \; 作为命令的结尾

  1. 删除 /opt/games/gta6/backup 目录下匹配的 txt 文件:
find /opt/games/gta6/backup -name "*.txt" -exec rm {} \;

  1. 给大家们猜猜这是什么意思:
find ~/autofunctions -name "auto*.sh" -exec nohup bash {} &

猜不出也没关系,后面再来学!

grep

什么是 grep 命令?

grep 命令是 global regular expression print 的缩写,用于在文件、多个文件或输入流中进行正则匹配,它会匹配我们在命令行中指定的「文本模式」(Pattern),并将结果输出打印。

换句话说,它会按我们提供的文本模式去搜索文件的内容。

如何使用 grep 命令?

grep 命令的使用非常简单,你只需在终端中输入 grep,并指定要搜索的模式和文件名。

基本语法:

grep [选项参数] 文本模式 文件名

举例说明

现在我们在 opt/games/gta6 目录下,有一个名为 readme.txt 的文件,像搜索里面包含关键字 "VI" 的行,那么可以使用以下命令:

grep "VI" readme.txt

这将在文件中查找包含 "VI" 的行,并将其打印输出。

当然,文本模式可以不用加双引号,也是可行的:

grep VI readme.txt

常用选项参数

  • -i:(ignore)忽略大小写进行匹配。
  • -n:(number)显示匹配行的行号。
  • -v:(reverse)反向匹配,打印不包含模式的行。
  • -r:(recursive)递归搜索指定目录及其子目录下的文件。

例子

  1. 在 readme.txt 中搜索 "vi",忽略大小写:
grep -i "vi" readme.txt

  1. 在 readme.txt 中搜索 http ,显示所在的行号:
grep -n http readme.txt

  1. 在 show.txt 中进行反向匹配,打印不包含文本模式 “” 的行:
grep -v 我 show.txt

  1. 当前目录及其子目录中递归搜索包含关键字 go 的行:

在标准输入流中搜索指定模式

Linux 中的标准输入输出、重定向、管道符-简书

基本写法:

command | grep pattern

这里,command 是生成输出的命令,pattern 是要搜索的模式,| 是管道符,可以将两个命令分隔开,|左边命令的输出就会作为 | 右边命令的输入

比如在读取 show.txt 的时候搜索 god23bin

cat show.txt | grep god23bin

这种用法,我一般是在大量日志输出中想找到错误信息的时候会用到:

tail -2000f project-test.log | grep -i error

搜索中使用单引号、双引号的区别

有读者问我,说单引号双引号的区别?

这个问的很好阿!没区别,基本上你要搜索的内容,可以用单引号、双引号,给引起来,也可以不用。 除非你搜索的内容比如有特殊的符号,比如空格,这时候就需要引号给整个内容给引起来,可以是单引号也可以是双引号:

grep "i love you" file.txt

grep 'i love you' file.txt

当然,如果你要搜索的内容包含了单引号,那么就需要用双引号引起来,比如搜索 i love 'you'

grep "i love 'you' " file.txt

对于 find 也是,搜索文件或目录,引号也是没区别的,比如:

find . -name dir
等价于
find . -name 'dir'
等价于 
find . -name "dir"

总结

现在,通过两分钟的快速学习,相信你已经学费了 find 和 grep 命令的基本使用了!

find 主要用于搜索文件和目录,而 grep 命令主要用于搜索文件的内容。当然,这里实际上还只是冰山一角,剩下的交给你去探索吧!

如果你对其他 Linux 命令也感兴趣,敬请期待我后续的文章。谢谢大家的阅读!

标签:文件,grep,目录,搜索,txt,find
From: https://www.cnblogs.com/changsha-jls10/p/17485119.html

相关文章

  • 9. find
    #语法格式find[查找范围]寻找条件常用参数:find-name#匹配名称find-user#匹配所有者find-group#匹配所属组find-exec{}\;#把find命令得到的结果交给随后的命令进行进一步处理。{}表示find命令搜索出的每一个文件#eg:find/root/-namea-execcp{}/c......
  • Linux下引用模块报错Error: Cannot find module
    1,问题描述在Linux中执行js文件,因文件中引用了crypto-js,但是在Linux环境中报错找不到这个模块//适配多个解密constCryptoJS=require("crypto-js");//constCryptoJS=require("/usr/local/lib/node_modules/crypto-js");var_0x14e728=newDate();functionhash(type,......
  • ma系列之-7-文本处理工具grep egrep 和正则
      1概念: grep概念:根据模式搜索文本,并将符合模式的文本行显示出来。 globalreserchbyexpressiongrep的特点:就是在某个行中找只要符合匹配的行就可以,就是做部分匹配的,不是整个单词匹配,显示的是整行数据,重点展示的是匹配到的那个字段。 grep使用的模式Pattern组成:由文本......
  • 5、题目:Training in Creative Problem Solving: Effects on Ideation and Problem Fin
    期刊信息(1)作者:GeorgeB.Graen,StephenG.Graen(2)期刊:OrganizationalBehaviorandHumanPerformance(3)DOI:10.1016/0030-5073(82)90233-1(4)ISSN:0030-5073   研究背景创造力训练作为工业培训的一个子集,普遍面临着工业培训研究的许多问题,也面临着一些独特的问题。......
  • macOS系统adb logcat grep 过滤多个关键字
    macOS系统adblogcatgrep过滤多个关键字: 1、过滤单个关键字:adblogcat|grep"error" 2、过滤多个关键字:adblogcat|grep-e"error"-e"warning"-e"fatal" 把日志保存到本地:adblogcat|grep-e"error"-e"warning"......
  • Linux 文件检索 | locate、grep、find
    Linux中查找文件或关键词检索文件内容是很常用的功能合理使用命令,高效检索需要的结果本文系统AmazonLinux2locate通常locate命令系统会自带,如果没有则需要安装mlocatelocate搜索文件速度很快,因为它不去实际目录中找文件,而是在文件数据库对应的文件中直接查找。数据......
  • HDU 5492 Find a path(DP)
    思路:将式子化开其实就是求(n+m-1)*s1-s2的最小值,s1表示各个格子的平方和,s2表示和的平方,留意到数据范围较小,令dp[i][j][k]为走到第i行第j列当前和为k的平方和的最小值,最后答案就是(n+m-1)*dp[i][j][k]-k*k#include<bits/stdc++.h>usingnamespacestd;#defineinf1e9inta[33][3......
  • axis2 maven报错Could not find artifact org.apache.axis2:axis2:jar:1.7.9
    Couldnotfindartifactorg.apache.axis2:axis2:jar:1.8.2inaliyunmaven(https://maven.aliyun.com/repository/public/)一开始以为是镜像的问题,但是换成中央仓库也没用https://repo.maven.apache.org/maven2/org/apache/axis2/axis2/1.7.9/实际上,这个目录里确实没有j......
  • papamelon 349. 城市帮派 Find them, Catch them(挑战程序设计竞赛)
    地址https://www.papamelon.com/problem/349一个城市里有两个帮派,另外有N个成员,成员从1∼N进行编号,每个成员来自于其中一个帮派。给定M个信息,每个信息有两种格式:Dab:a,b(1≤a,b≤N,a≠b)两个人不是一个帮派的Aab:判断a,b(1≤a,b≤N,a≠b)两个人是否为同一个帮派......
  • ubuntu find whereis locate find
     which只能寻找执行文件,并在PATH变量里面寻找。whereis从linux文件数据库(/var/lib/slocate/slocate.db)寻找,所以有可能找到刚刚删除,或者没有发现新建的文件。locate同上,不过文件名是部分匹配。find是直接在硬盘上搜寻,功能强大,但耗硬盘,一般不要用。......