Linux下grep和find命令

1、 Linux下grep 命令

1.1简介:

​ grep(Global Regular Expression Print) 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本。并把匹配的行打印出来。表示全局正则表达式输出,它的使用权限是所有用户。

1.2 格式

grep [options]

1.3 主要参数

[options]主要参数

  • -r:搜索子目录
  • -d:不搜索子目录
  • -c:只输出匹配行的计数
  • -C:匹配的上下文分别显示[number]行
  • -i:不区分大小写(只适用于单字符)
  • -h:查询多文件时不显示文件名
  • -l:查询多文件时只输出包含匹配字符的文件名
  • -L:列出不匹配的文件名
  • -w:只匹配整个单词,比如hello不匹配helloabc
  • -n:显示匹配行及行号
  • -s:不显示不存在或无匹配文本的错误信息
  • -v:显示不包含匹配文本的所有行
  • --color=auto:找到的关键字部分加上颜色的显示

pattern正则表达式主要参数

  • \ : 忽略正则表达式中特殊字符的原有含义
  • ^ :匹配正则表达式的开始行
  • $ :匹配正则表达式的结束行
  • \< :从匹配正则表达式的行开始
  • \> :从匹配正则表达式的行结束
  • []: 单个字符,如[A] 即A符合要求
  • [-]: 范围,如[A-Z],即 A一直到Z都符合要求
  • .:所有的单个字符
  • *: 所有字符,长度可以为0

1.4 grep示例说明

# grep 递归检索指定扩展名的文件内容
grep -rn --include=*.后缀名 "检索词"

# grep 排除指定文件类型查找文件内容
grep "检索词" -rR --exclude=*.{
    
    后缀名1,后缀名2}

# grep 排除指定目录查找文件内容
grep "检索词" -rn --exclude-dir={
    
    目录1,目录2}

# 显示所有以d开头的文件中包含 test的行
grep "test" d*  

# 显示在aa,bb,cc文件中包含test的行
grep "test" aa bb cc    

# 显示所有包含每行字符串至少有5个连续小写字符的字符串的行
grep "[a-z]\{5\}" aa   

# 显示/usr/src目录下的文件(不含子目录)包含magic的行
grep magic /usr/src  

# 显示/usr/src目录下的文件(包含子目录)包含magic的行
grep -r magic /usr/src  

# 只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)
grep -w pattern files


# :在文件名 包含202005的文件中查找hello字符串,并返回该文件。(不加 -l参数会返回行内容)
grep -rl hello *202005* 

# 在a,b,c三个文件中查找hello,并返回该文件。
grep -rl "hello" a.txt b.txt c.txt

# 查找包含4个及以上数字的 行返回。(注意:\表示启用正则含义,或者用 egrep "[0-9]{4}" a.txt)
grep "[0-9]\{4\}" a.txt

# 当匹配多个行,可以通过管道转到 less 上查看。
grep hello /usr/file/* | less 

# 显示既匹配 pattern1 又匹配 pattern2 的行。
grep pattern1 a.txt| grep pattern2 

# 匹配正则pattern1 或pattern2 的行。
grep pattern1 | pattern2 a.txt

# 会匹配 "helloa"、"hellob"、"yhelloa"等。
grep hello* 

# 匹配"hello"和"helloa",但不是"yhello"。
grep "\<hello" * 

# 只匹配"hello",而不是"yhello"或"helloa"等其他的字符串。
grep "\<hello\>" 

2、Linux 下find命令

在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。但两者是有区别的:

  1. find 命令式根据文件的属性进行查找,如文件名、文件大小、所有者、所有组、是否为空、访问时间、修改时间等
  2. grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找

2.1 基本格式

find path expression

2.2 按照文件名查找

# 在根目录下查找文件httpd.conf,表示在整个硬盘查找
find / -name httpd.conf  

# 在/etc目录下文件httpd.conf
find /etc -name httpd.conf  

# 使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
find /etc -name "*srm*"  

# 表示当前目录下查找文件名开头是字符串‘srm’的文件
find . -name "srm*"   

2.3 按照文件特征查找

# 查找在系统中最后10分钟访问的文件(access time)
find / -amin -10   
# 查找在系统中最后48小时访问的文件
find / -atime -2   
# 查找在系统中为空的文件或者文件夹
find / -empty   
# 查找在系统中属于 group为cat的文件
find / -group cat   
# 查找在系统中最后5分钟里修改过的文件(modify time)
find / -mmin -5   
#查找在系统中最后24小时里修改过的文件
find / -mtime -1   
#查找在系统中属于fred这个用户的文件
find / -user fred   
#查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
find / -size +10000c  
#查找出小于1000KB的文件
find / -size -1000k   

2.4 使用混合查找方式查找文件

参数有: !,-and(-a),-or(-o)。

# 在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
find /tmp -size +10000c -and -mtime +2   
# 在/目录下查找用户是fred或者george的文件文件
find / -user fred -or -user george   
# 在/tmp目录中查找所有不属于panda用户的文件
find /tmp ! -user panda  

猜你喜欢

转载自blog.csdn.net/zhw21w/article/details/126832756