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。但两者是有区别的:
- find 命令式根据文件的属性进行查找,如文件名、文件大小、所有者、所有组、是否为空、访问时间、修改时间等
- 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