资讯专栏INFORMATION COLUMN

Linux 文件搜索命令find,grep

sunnyxd / 541人阅读

摘要:搜搜用户组的文件搜索权限的文件搜索包含权限的文件,例如命令是递归搜索目录的,可以通过指定递归的深度,该参数建议放在紧跟目录路径后的位置,不然会有一条警告。需要在基本模式中使用元字符请加转义符。

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 字节 wk 千字节 M 兆字节 G 1G字节 b 512个字节块,相当于一个扇区,单位是大小写敏感的

    搜索最近修改的文件
    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

-P perl的正则风格(PCRE)

-G 基本正则模式
-E-G主要区别在于, 基本模式下 ?, +, {, |, (, )这些元字符是失效的,作为普通字符解释。需要在基本模式中使用元字符请加转义符。例如我要匹配当前目录下文本中包含{{{, 需要写成grep -R "{{3}" ./* 或者 grep -ER "{{3}" ./*

建议将正则部分始终放在单引号中,例如想匹配 php 或 apache应写成 egrep php |apacheegrep "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 次,便开始搜索下一个文件

-o only matching,只显示匹配一行中匹配到的内容。 grep 默认是将能包含匹配内容所在行输出,使用-o则只打印匹配的部分

-n 显示匹配行在所匹配文件中行数。

-h 不显示匹配的结果中的文件名列

影响文件、目录搜索方式的参数

-r or -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 下替换 为空格
find . -type f -name "*.js" -exec sed -i "" "s/$(printf " ")/ /g" {} ;

linux 下查找大文件
find /var/logs/ -type f -size +1000000k -exec ls -lh {} ;

参考

    How to run grep with multiple AND patterns?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7576.html

相关文章

  • Linux 搜索命令总结 - whereis,which,locate,find,grep

    摘要:为了避免这种情况,可以在使用之前,先使用命令,手动更新数据库。为的意思显示命令的帮助信息。为的意思最大显示条数至多显示最大显示条数条查询到的内容。命令在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。 一、命令搜索命令 whereis 与 which 1. whereis 命令 搜索命令所在路径及帮助文档所在位置 选项 -b: 只查找可执行文件 -m:...

    赵春朋 评论0 收藏0
  • linux文件搜索命令

    摘要:将搜索的大小单位修改成字节。例如,为搜索大文本文件,可以使用以下代码查找文件里的内容要搜索文件内容,应该使用命令。 1.查找执行文件(which/whereis) which用于从系统的PATH变量所定义的目录中查找可执行文件的绝对路径。比如说想查找passwd这个命令在系统中的绝对路径,使用方法如下: [root@localhost ~]# which passwd /usr/bin...

    luck 评论0 收藏0
  • Linux 常用命令用法:cat, find, xargs, tr, grep, cut, sed

    摘要:指定输出的分隔符使用,将作为文件名之间的分割符。这个命令的作用就是将的内容,作为其他命令的参数进行调用。比如结合命令命令的分隔符除了可能是之外,也可能是空格。在不指定文件名的情况下,接受作为输入源。比如上述命令应该修改为。 本文列明Linux的常用命令用法,学会了这些命令之后,结合shell编程知识,就可以做各种自动编译/集成的工作啦。本文地址:https://segmentfault...

    Yang_River 评论0 收藏0
  • Linux命令_文件相关

    摘要:和处于方括号内时不用使用转义字符就失去通配符的作用。查找文件名为的文件输出重定向命令允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。文件压缩解压与命令结合使用实现文件打包压缩。 最好的命令: --help 1. 查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令 Linux文件或者...

    eternalshallow 评论0 收藏0
  • Linux命令_文件相关

    摘要:和处于方括号内时不用使用转义字符就失去通配符的作用。查找文件名为的文件输出重定向命令允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。文件压缩解压与命令结合使用实现文件打包压缩。 最好的命令: --help 1. 查看文件信息:ls ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令 Linux文件或者...

    lifefriend_007 评论0 收藏0

发表评论

0条评论

sunnyxd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<