您是否曾经面临过寻找合适人选的任务?,却不知道从哪里开始寻找?那么,这是来救援!
grep是一个强大的文件模式搜索器,每个发行版都配备Linux。如果出于某种原因,它没有安装在您的系统上,您可以通过包管理器轻松安装它,如图所示。
$ sudo apt install grep [On Debian, Ubuntu and Mint] $ sudo yum install grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-apps/grep [On Gentoo Linux] $ sudo apk add grep [On Alpine Linux] $ sudo pacman -S grep [On Arch Linux] $ sudo zypper install grep [On OpenSUSE]
我发现让你的脚沾湿的最简单的方法grep 命令就是直接投入并使用一些现实世界的例子。
1.在Linux中搜索和查找文件
假设您刚刚在计算机上安装了新 Ubuntu 的全新副本,并且您将提供Python编写镜头脚本。
您一直在网上寻找教程,但您发现有两个不同的版本Python正在使用,并且您不知道哪个版本由安装程序执行,或者是否安装了任何模块。
只需运行以下命令和grep如图:
dpkg -l | grep -i python

首先,我们跑了dpkg –l,其中列出了已安装的*.deb您系统上的软件包。其次,我们将该输出通过管道传输到grep -i python,它简单地说明“转到 grep 并过滤掉并返回所有内容 'Python’在里面。”
这-i选项可以忽略大小写,如grep区分大小写。使用-ioption 是一个养成的好习惯,当然,除非您试图确定更具体的搜索。
2. 在Linux中搜索和过滤文件
这grep还可以用于在单个文件或多个文件中搜索和过滤。让我们看一下这个场景:
您的操作遇到了一些麻烦阿帕奇网络服务器,并且您已联系网络上众多精彩论坛之一寻求帮助。
回复您的好心人要求您发布您的内容/etc/apache2/apache2.conf文件。如果您可以删除所有注释行,对您、帮助您的人以及阅读它的每个人来说不是更容易吗?好吧,你可以!只需运行这个:
grep -v ^\# /etc/apache2/apache2.conf | grep .
这-v选项告诉grep反转其输出,这意味着不打印匹配的行,而是执行相反的操作并打印所有与表达式不匹配的行,在本例中,#注释行。
请注意,我们还使用了grep .最后以隐藏所有空行的输出。这样我们只能在终端中看到配置设置。

3.在Linux中查找所有.mp3文件
这grep对于过滤非常有用标准输出。例如,假设您有一个完整的文件夹,其中充满了多种不同格式的音乐文件。
你想要找到所有的*.mp3来自艺术家的文件杰伊兹,但您不想要任何重新混音的曲目。使用与几个grep管道可以解决这个问题:
# find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”
在这个例子中,我们使用寻找打印所有文件*.mp3扩展,通过管道将其连接到grep –i过滤并打印所有名为“杰伊兹”然后另一个管道到grep –vi它会过滤掉并且不会打印带有该字符串的所有文件名(在任何情况下)“混音”。
[您可能还喜欢:]
4. 显示搜索字符串之前或之后的行数
另外两个选项是-A和-B开关,显示匹配的行以及搜索字符串之前或之后的多行。
虽然手册页提供了更详细的解释,但我发现最容易记住这些选项:-A=后, 和-B=前:
ifconfig | grep -A 4 inet ifconfig | grep -B 2 UP

5. 打印匹配周围的行数
grep 的-C选项类似,但不是打印字符串之前或之后的行,而是打印任一方向的行:
# ifconfig | grep -C 2 lo
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 15314 bytes 1593769 (1.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
6. 计算匹配的数量
类似于管道agrep字符串到字数() grep 的内置选项可以为您执行相同的操作:
# ifconfig | grep -c inet6
7. 在 Linux 中按给定字符串搜索文件
这–n选项grep在编译错误期间调试文件时非常有用。它显示给定搜索字符串在文件中的行号:
# grep -n "main" setup.py
8. 在所有目录中递归搜索字符串
如果您想在当前目录及其所有子目录中搜索字符串,您可以指定–r递归搜索的选项:
# grep -r “function” *
9. 搜索整个模式
通过-wgrep 的选项搜索字符串中的整个模式。例如,使用:
# ifconfig | grep -w "RUNNING"
将打印出包含引号中的模式的行。另一方面,如果您尝试:
# ifconfig | grep -w "RUN"

不会返回任何内容,因为我们搜索的不是模式,而是整个单词。
10. 在 Gzipped 文件中搜索字符串
值得一提的是 grep 的衍生物。第一个是抓住,其中,类似于,用于压缩的文件。它采用相同的选项grep并以相同的方式使用:
# zgrep -i error /var/log/syslog.2.gz

11. 匹配文件中的正则表达式
这是另一种衍生品,代表“扩展全局正则表达式”。它识别额外的表达元字符,例如at + ? |和()。
如果需要的话,对于搜索源文件和其他代码片段非常有用。可以从常规调用grep通过指定-E选项。
grep -E
12. 搜索固定模式字符串
这在文件或文件列表中搜索固定模式字符串。它是一样的grep -F。常见的使用方式fgrep是将模式文件传递给它:
fgrep –f file_full_of_patterns.txt file_to_search.txt
这只是一个起点grep,但正如您可能看到的那样,它对于多种用途来说都是无价的。除了我们已经实现的简单的一行命令之外,grep可以用来写强大的计划任务就业岗位、实力强劲外壳脚本,首先。
发挥创意,尝试一下上面的选项手册页,并提出grep 表达式为你自己的目的服务!
