find与grep的区别:
find命令是根据文件的属性进行查找
如文件名 文件大小 所有者 所属组 是否为空 访问时间 修改时间等
grep是根据文件的内容进行查找
会对文件的每一行按照给定的模式(patter)进行匹配查找
一、find命令
find命令是⼀个无处不在的命令 是linux中最有用的命令之一
find命令用于在⼀个目录及⼦目录中搜索文件 可以指定⼀些匹配条件
如 按文件名 文件类型 用户甚至是时间戳查找文件
语法:
find 路径 -以什么查找 [-print] [-exec -ok command] {} \;
命令后面加上 -exec ls -l {} \
代表列出每个文件的详细信息
即由-exec后面的ls -l指令作为参数
-name 根据文件名查找
例一:
find ~ -name "*.txt" -print
在根目录$HOME中查以txt结尾的文件并打印出来
例二:
find /etc -name "t*" -print
在etc目录中查以t开头的文件并打印出来
例三:
find . -name "[A-Z]*" -print
查以大写字母开头的文件
例四:
find . -name "[a-z][a-z][0–9][0–9].txt" -print
查以两个小写字母和两个数字开头的txt文件
-perm 根据权限(permission)查找
例:
find -perm 644 -print
查权限为644的⽂件并打印出来
-type 根据类型查找
例一:
find ~ -type d
查类型为目录的⽂件
例二:
find ~ ! -type d
查类型不为目录的⽂件
-size 根据长度查找
例一:
find . -size +1000000c -print
查长度大于1Mb的文件(c:character 字符)
例二:
find . -size 100c -print
查长度为100c的文件
例三:
find . -size +10 -print
查长度大于10块的文件(1块=512字节)
二、grep命令
grep (global search regular expression(RE) and print out the line 全局搜索正则表达式并把行打印出来)
是⼀种强大的文本搜索⼯具 它能使用正则表达式搜索文本 并把匹配的行打印出来
查询
先看一个简单的查询例子:
grep 'Na' ex*
显示所有以ex开头的⽂件中包含Na的⾏
后面加上-r
则代表递归
后面加上-n
则代表显示行号
查找多个文件
grep 'Na' ex* /example.desktop /mnt /Music
多个路径之间用空格隔开
-v 取相反
grep -v "#" /etc/host.conf
表示从/etc/host.conf
中查询不以#开头的行
grep "#" /etc/host.conf
表示从/etc/host.conf
中查询以#开头的行
| 管道:过滤
ls -l | grep "^d"
代表从ls -l输出的结果中过滤出以d开头的行
正则表达式的元字符
^ 锚定行的开始
如:'^grep'
匹配所有以grep开头的行
$ 锚定行的结束
如:'grep$'
匹配所有以grep结尾的行
. 匹配⼀个非换行符的字符
如:'gr.p'
匹配gr后接⼀个任意字符 然后是p
*匹配零个或多个先前的字符
如:'*grep'
匹配所有⼀个或多个空格后紧跟grep的行
. 和 * ⼀起用代表任意字符
[] 匹配⼀个指定范围内的字符
如:'[Gg]rep'
匹配Grep和grep
[^] 匹配⼀个不在指定范围内的字符
如:'[^A-FH-Z]rep'
匹配不包含A-F和H-Z的⼀个字母开头,紧跟rep的行
可选项
-b:在每一行前面加上其所在的块号
根据上下⽂定位磁盘块时可能会用到
-c:显示匹配到的行的数目 而不是显示行的内容
-h:不显示文件名
-i:比较字符时忽略大小写的区别
-l(小写字母L):只列出匹配行所在⽂件的文件名(每个文件名只列⼀次) ⽂件名之间⽤换行符分隔
-n:在每一行前⾯加上它在文件中的相对行号
-r:对目录下递归查询所有子目录
没加-r 文件夹无法查找
加了-r 递归查询该目录下所有子目录文件
-v:反向查找 只显示不匹配的行
-w:将表达式作为词来查找 就像它被<和>夹着那样
只适⽤于grep命令
(并非所有Linux版本的grep都支持该功能)