Content

Shell查找命令find和grep的具体使用(shell中查找指定列的内容)墙裂推荐

在这里插入图片描述

文章摘要

这篇文章介绍了Shell中常用的文件查找命令`find`、`locate`、`whereis`以及文本搜索命令`grep`和`egrep`的使用方法。 1. **`find`命令** - 用于查找文件或目录,支持多种选项如: - 区分大小写:`-name *.conf` - 不区分大小写:`-iname aa` - 按文件类型搜索:`-type f`(文件)或`-type d`(目录) - 按属主或属组搜索:`-user hdfs`或`-group yarn` - 按文件大小搜索:`-size +10k` - 按修改时间搜索:`-mtime +7` - 递归搜索:`-r` 2. **`locate`命令** - 用于在数据库中查找文件,比`find`命令更快,支持更新数据库以提高查找效率。 3. **`whereis`命令** - 用于查找二进制文件,如:`whereis mysql`。 4. **`grep`命令** - 用于文本搜索,支持正则表达式和多种选项如: - 包括大小写匹配:`-i` - 排除特定内容:`-v` - 显示行号:`-n` - 支持扩展正则表达式:`-E` - 不支持正则表达式:`-F` - 递归搜索:`-r` - 选项示例: - `grep python file`:查找文件中包含“python”的行 - `grep -v python file`:排除文件中包含“python”的行 - `grep -iv python file`:忽略大小写,排除文件中包含“python”的行 - `grep -n python file`:显示行号,查找文件中包含“python”的行 5. **`egrep`命令** - 与`grep`类似,但支持扩展正则表达式,与`grep -E`等价。 文章总结了这些命令的使用场景、语法格式和选项,帮助用户更好地掌握Shell文件和文本操作的技巧。


目录第一节 文件查找之find命令第二节 find、locate、whereis和which总结第三节 grep和egrep

语法格式:

在这里插入图片描述

在这里插入图片描述

常用选项

# – name 查找/etc目录下以conf结尾的文件 区分大小写 find /etc -name ‘*conf’ # -iname 查找当前目录下文件名为aa的文件,不区分大小写 find . -iname aa # -user 查找文件属主为hdfs的所有文件 find . -user hdfs # -group 查找文件属组为yarn的所有文件 find . -group yarn # -type # f 文件 find . -type f # d 目录 find . -type d # c 字符设备文件 find . -type c # b 块设备文件 find . -type b # l 链接文件 find . -type 1 # 管道文件 find . -type p # -size # -n 大小小于n的文件 # +n 大小大于n的文件 # n 大小等于n的文件 # 例子1:查找/etc目录下小于1000字节的文件 find /etc -size -10000c # 例子2:查找/etc目录下大于1M的文件 find /etc -size +1M # -mtime # -n天以内修改的文件 # +n n天以外修改的文件 # n 正好n天修改的文件 # 例子1:查找/etc目录下5天之内修改且以conf结尾的文件 find /etc -mtime -5 -name ‘*.conf’ # 例子2:查找/etc目录下10天之前修改且属主为root的文件 find /etc -mtime +10 -user root # -mmin # -n n分钟以内修改的文件 # +n n分钟以外修改的文件 # 例子1:查找/etc目录下30分钟之前修改的文件 find /etc -mmin +30 # 例子2:查找/etc目录下30分钟之内修改的目录 find /etc -mnin -30 -type d # -mindepth n 表示从n级子目录开始搜索 # 例子:在/etc下的3级子目录开始搜索 find /etc -mindepth 3 # -maxdepth n 表示最多搜索到n-1级子目录 # 例子1:在/etc下搜索符合条件的文件,但最多搜索到2级子目录 find /etc -maxdepth 3 -name ‘*.conf’ # 例子2: find https://www.jb51.net/article/etc/ -type f -name ‘*.conf’ -size +10k -maxdepth 2

了解选项

# -nouser 查找没有属主的用户 find . -type f -nouser # -nogroup 查找没有属组的用户 find . -type f -nogroup # -perm 根据权限查找 find . -perm 664 # -prune 通常和-path一起使用,用于将特定目录排除在搜索条件之外 # 例子1:查找当前目录下所有普通文件,但排除etc目录 find . -path https://www.jb51.net/article/etc -prune -o -type f # 例子2:查找当前目录下所有普通文件,但排除etc和opt目录 find . -path https://www.jb51.net/article/etc -prune -o -path https://www.jb51.net/article/opt -prune -o -type f # 例子3:查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs find . -path https://www.jb51.net/article/etc -prune -o -path https://www.jb51.net/article/opt -prune -o type f -a -user hdfs # 例子4:查找当前目录下所有普通文件,但排除etc和opt目录,但属主为hdfs,且文件大小必须大于500字 find . -path https://www.jb51.net/article/etc -prune -o -path https://www.jb51.net/article/opt -prune -o -type f -a -user hdfs -a -size +500c # -newer file1 比file1新的文件 find /etc -newer a

对查找到的文件操作

# -print 打印输出 # -exec 对搜索到的文件执行特定的操作,格式为-exec ‘command'{} \; # {} 表示前面搜索到的结果 固定写法{} \ # 例子1:搜索/etc下的文件(非目录),文件名以conf结尾且大于10k,然后将其删除 find https://www.jb51.net/article/etc/ -type f -name ‘*.conf’ -size +10k -exec rm -f {} \; # 例子2:将/var/1og/目录下以1og结尾的文件,且更改时间在7天以上的删除 find /var/log/ -name ‘*.1og’ -mtime +7 -exec rm -rf {} \; # 例子3:搜索条件和例子1一样,只是不删除,而是将其复制到/root/conf目录下 find https://www.jb51.net/article/etc/ -size +10k -type f -name ‘*.conf’ -exec cp {} /root/conf/ \; # -ok 和exec功能一样,只是每次操作都会给用户提示 # 逻辑运算符: # -a 与 # -o 或 # -not|! 非 # 例子1:查找当前目录下,属主不是hdfs的所有文件 find . -not -user hdfs | find .! -user hdfs # 例子2:查找当前目录下,属主属于hdfs,且大小大于300字节的文件 find . -type f -a -user hdfs -a -size +300c # 例子3:查找当前目录下的属主为hdfs或者以xm1结尾的普通文件 find . -type f -a \( -user hdfs -o -name ‘*.xml’)

locate命令介绍:

文件查找命令,所属软件包mlocate不同于find命令是在整块磁盘中搜索,locate命令在数据库文件中查找find就会很影响IO性能,locate会归档到数据库中,文件查找就会很快。find是默认全部匹配,locate则是默认部分匹配

通过updatedb命令及时更新locate命令的数据库,做到及时查到,否则就要等到它自动归档到数据库中。

yum -y install mlocate # 用户更新/var/lib/mlocate/mlocate.db # 所使用配置文件/etc/updatedb.conf # 该命令在后台cron计划任务中定期执行 updatedb # 会遍历整个文件系统 会比较慢 locate my.cnf

whereis

-b 只返回二进制文件-m 只返回帮助文档文件-s 只返回源代码文件
whereis mysql whereis -b mysql whereis -m mysql

which 作用∶仅查找二进制程序文件

-b 只返回二进制文件

which mysql

在这里插入图片描述

第一种形式:

第二种形式:

在这里插入图片描述

在这里插入图片描述

# 必须掌握的选项: # -v 最示不匹配pattern的行 排除包含字符的内容 # -i 搜索时忽略大小写 # -n 显示行号 # -E 支持扩展的正则表达式 # -F 不支持正则表达式,按字符串的字面意思进行匹配 # -r 递归搜索 # file i love python .lovelove python lovelove LOVE PYTHON Love pYtHoN grep python file # file文件包含python的行 grep -v python file # file文件不包括python的文件 grep -iv python file # file文件不包括python的文件 忽略大小写 grep -n python file # file文件包含python的行 并显示行号 # 下面的|就是拓展正则表达式 grep “python | PYTHON” file grep -E “python | PYTHON” file # -F 不支持正则表达式,按字符串的字面意思进行匹配 grep “py.*” file grep -F “py.*” file # 需了解的选项: # -c 只输出匹配行的数量,不显示具体内容 # -w 匹配整词 # -x 匹配整行 # -l 只列出匹配的文件名,不显示具体匹配行内容 grep -c python file grep -w love file grep -x “i love python” file

grep和egrep:

grep默认不支持扩展正则表达式,只支持基础正则表达式使用grep -E可以支持扩展正则表达式使用egrep可以支持扩展正则表达式,与grep -E等价

到此这篇关于 Shell查找命令find和grep的具体使用的文章就介绍到这了,更多相关 Shell查找命令find和grep内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:利用shell find命令删除过期的缓存方法示例Shell中使用grep、sed正则提取和替换字符串shell脚本之正则表达式、grep、sed、awk详解 Shell中的grep命令一天一个shell命令 linux文本内容操作系列-grep命令详解Shell正则表达式之grep、sed、awk实操笔记shell grep 查找进程的小技巧