Linux 文件搜索命令find,grep
2017-04-07 09:49
651 查看
find 命令
简单示例:find . -type f -name "test"
-type f普通文件
-type d目录
-type p管道
-type l符号链接
-name "文件名"要搜索的文件名
还可以用
-iname进行大小写无关的搜索
搜索文件的结果作为下一个命令的参数
使用
-exec参数,示例:
find . -type f -iname "*test*" -exec ls -l \{\} \;
*
\{\}是输入参数的占位符,哪里需要放哪里。这里的转义符在我的机器上可有可无
{}也可以
\;表示命令的结束*
加上文件大小限制
-size
find . -type f -name "*.c" -size +100k搜索当前目录下大于100KB的.C 文件
find . -type f -name "*.c" -size -1000c搜索当前目录下小于1000字节的.C文件
find . -type f -name "*.c" -size 1000c搜索当前目录下等于1000字节的.C文件
搜索 -1k 无效的,应换为 1024c
支持的单位:
c字节
w字
k千字节
M兆字节
G1G字节
b512个字节块,相当于一个扇区,单位是大小写敏感的
搜索最近修改的文件
ctime最近访问,
mtime最近修改文件内容,
atime最近修改文件的节点信息
以
ctime为例,
ctime n表示最近n天以前访问的,
ctime -n表示最近n天之内访问的。
find . -type f -name "*.c" -ctime +1修改一天以前访问的 .C 文件
*ctime 包括了 mtime, 同时还包括了文件权限、文件所属用户等基本信息的修改
他们的区别参见 Difference between mtime, ctime and atime*
还可以使用
cmin
mmin
amin将时间粒度缩小到分钟
搜索指定用户的文件
find / -user syslog搜索属于 syslog用户的文件。
find / -group shadow搜搜用户组shadow的文件
find / -perm 644搜索644权限的文件
find / -perm -644搜索包含 644权限的文件,例如744
find 命令是递归搜索目录的, 可以通过
-maxdepth num指定递归的深度,该参数建议放在紧跟目录路径后的位置,不然会有一条警告。
grep 根据文件的内容进行搜索
基本示例:搜索某个文件中包含关键字: grep 'keyword' filename多个文件空格分开
常用参数说明
选择正则匹配的模式:
-E扩展正则模式,等价于
egrep
-F字符串,不使用正则匹配 ,等价于
fgrep
-Pperl的正则风格(PCRE)
-G基本正则模式
-E和
-G主要区别在于,
基本模式下
?, +, {, |, (, )这些元字符是失效的,作为普通字符解释。需要在基本模式中使用元字符请加转义符
\。例如我要匹配当前目录下文本中包含
{{{,
需要写成
grep -R '{\{3\}' ./*或者
grep -ER '{{3}' ./*。
建议将正则部分始终放在单引号中,例如想匹配 PHP 或 apache应写成
egrep php \|apache或
egrep 'php|apache'否则
|在Linux 命令行下会被当作一个管道符号
grep,egrep,fgrep的区别请戳我
影响匹配的其他参数
-i忽略大小写
-w单词匹配
-v显示不匹配的行
-f使用保存在文件中的正则表达式做匹配
egrep -f pattern.txt a.txt b.txt
使用pattern.txt的正则匹配,pattern.txt 内容为
[[:digit:]]{9},匹配结果为
a.txt:123456
b.txt:234575
保存正则表达式的文件, 默认一行一个正则,搜索中会将匹配所有正则的结果输出
-x搜索的文件需要一整行匹配正则表达式
例如将上例中的 a.txt第一行内容
123456修改为
123456 789, 执行如下命令
egrep -xf pattern.txt a.txt b.txt, 匹配结果为
b.txt:234575
因为修改后a.txt的内容,不再一整行都满足正则,也可以理解为正则加了行首行尾的位置匹配:
^expression$
影响匹配结果显示的参数
-c显示匹配的行数,不显示匹配的具体内容
-L只显示没有匹配的文件名
-l只显示匹配的文件名
-m num限制匹配的次数,最大为num个
egrep -m 1 -f pattern.txt a.txt b.txt这样一条指令,只会在每个文件中匹配 1 次,便开始搜索下一个文件
-oonly matching,只显示匹配一行中匹配到的内容。
grep 默认是将能包含匹配内容所在行输出,使用
-o则只打印匹配的部分
-n显示匹配行在所匹配文件中行数。
-h不显示匹配的结果中的文件名列
影响文件、目录搜索方式的参数
-ror
-R递归的搜索目录,
很常用
区别在于-R 会搜索符号链接指向的文件或目录; -r 则不会,除非该符号链接在参数中显示指定了一个符号链接,例如
egrep -rn '[[:digit:]]' ./ ./.local/share/systemd/user,该命令在当前目录下搜索,
还包括了一个符号链接
--exclude=GLOB跳过文件名匹配'GLOB'的文件,例如在版本库中搜索时
egrep --exclude=*.svn -rnf pattern.txt ./排除版本库的文件
GLOB 中可以使用 , ?, []*
--include=GLOB仅在文件名匹配'GLOB'的文件中搜索
示例
排除多个目录进行搜索
grep -rn --color --exclude-dir={node_modules,scripts,tests} "console.log" ./*
mac 下替换多个文件内容
grep -rl '10.0.2.118' ./*.js | xargs sed -i -e "s/abc/def/g"
mac 下替换
\t为空格
find . -type f -name "*.js" -exec sed -i '' "s/$(printf '\t')/ /g" \{\} \;
linux 下查找大文件
find /var/logs/ -type f -size +1000000k -exec ls -lh {} \;
参考
How to run grepwith multiple AND patterns?
本文转载:https://segmentfault.com/a/1190000000622746
相关文章推荐
- Linux下Find文件查找与Grep文件内容查找命令
- linux下的find文件查找命令与grep文件内容查找命令
- linux下的find文件查找命令与grep文件内容查找命令
- linux下的find文件查找命令与grep文件内容查找命令
- Linux 搜索命令(locate/find/whereis/which/grep)
- linux下的find文件查找命令与grep文件内容查找命令
- linux 文件中搜索字符串命令 grep
- Linux常用命令——搜索which,whereis,slocate,find,grep
- linux下的find文件查找命令与grep文件内容查找命令
- Linux 文件搜索命令 find
- linux下的find文件查找命令与grep文件内容查找命令
- linux 操作系统中find文件搜索命令的使用
- Linux中使用grep命令搜索文件名及文件内容的方法
- linux常用命令-文件搜索命令-find
- linux下的find文件查找命令与grep文件内容查找命令
- Linux 命令 - find: 搜索文件
- linux下用grep命令根据文件内容进行关键字搜索[linux ubuntu grep] -转
- linux下的find文件查找命令与grep文件查找命令
- linux下的find文件查找命令与grep文件内容查找命令
- linux 文件中搜索字符串命令 grep