Linux中使用find与grep进行文件和文本查找
在Linux系统中,文件和文本的查找是非常常见的操作。find和grep是两个非常强大的命令,分别用于根据文件属性和文件内容进行查找。
命令区别
- find命令主要用于根据文件的属性进行查找,如文件名、文件大小、所有者、所属组、是否为空、访问时间、修改时间等。
- grep命令则主要用于根据文件的内容进行查找,它会对文件的每一行按照给定的模式(pattern)进行匹配。
grep命令详解
grep全称是Global Regular Expression Print,表示全局正则表达式打印,其使用权限为所有用户。
grep -ir test ./ # 不区分大小写地递归搜索test
grep -i pattern files # 不区分大小写地搜索,默认情况下区分大小写
grep -l pattern files # 只列出匹配的文件名
grep -L pattern files # 列出不匹配的文件名
grep -w pattern files # 只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’)
grep -C number pattern files # 匹配的上下文分别显示[number]行
grep pattern1 | pattern2 files # 显示匹配 pattern1 或 pattern2 的行
grep pattern1 files | grep pattern2 # 显示同时匹配 pattern1 和 pattern2 的行
grep -n pattern files # 显示匹配行的行号
grep -c pattern files # 统计匹配行的数量
正则表达式主要参数
符号 | 含义 |
---|
\ | 忽略正则表达式中特殊字符的原有含义 |
^ | 匹配正则表达式的开始行 |
$ | 匹配正则表达式的结束行 |
< | 从匹配正则表达式的行开始 |
> | 到匹配正则表达式的行结束 |
[ ] | 单个字符,如[A]即A符合要求 |
[ - ] | 范围,如[A-Z],即A、B、C一直到Z都符合要求 |
. | 所有的单个字符 |
* | 有字符,长度可以为0 |
grep -irn phg ./ # 一般查询phg,忽略大小写,递归查询,显示匹配行和行号
grep -irn '^phg' ./ # 查询以phg开头的行
grep -irn 'Test$' ./ # 查询以Test结尾的行
# 不区分大小写i
# 递归查询r
# 显示匹配行及行号n
find命令详解
find path expression
find ./ -name 'test*'
按文件名查找
(1) find / -name httpd.conf # 在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2) find /etc -name '*srm*' # 使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(3) find . -name 'srm*' # 表示当前目录下查找文件名开头是字符串‘srm’的文件
按文件特征查找
(1) find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
(2) find / -atime -2 # 查找在系统中最后48小时访问的文件
(3) find / -empty # 查找在系统中为空的文件或者文件夹
(4) find / -group cat # 查找在系统中属于 group为cat的文件
(5) find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
(6) find / -mtime -1 # 查找在系统中最后24小时里修改过的文件
(7) find / -user fred # 查找在系统中属于fred这个用户的文件
(8) find / -size +10000c # 查找出大于10000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9) find / -size -1000k # 查找出小于1000KB的文件
使用混合查找方式
参数有: !, -and(-a), -or(-o)。
(1) find /tmp -size +10000c -and -mtime +2 # 在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2) find / -user fred -or -user george # 在/目录下查找用户是fred或者george的文件
(3) find /tmp ! -user panda # 在/tmp目录中查找所有不属于panda用户的文件