Bash 中的 grep
grep 命令在给定的文件中搜索包含与给定模式列表匹配的行。换句话说,使用 grep 命令在文本文件中搜索短语、数字、数据或字符串。当它在文件中找到匹配项时,它会在屏幕或 bash 终端上显示这些行。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 搜索 |
先决条件 | BASH、KSH、FISH、TCSH |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 3 分钟 |
bash 中的 grep 示例
语法如下:
$ grep 'word-to-search' filename
# State many files at once for searching purpose #
$ grep 'word-to-search' file1 file2 file3
$ grep 'pattern' filename
# egrep regex using the egrep syntax #
$ grep -E 'word1|word2' /path/to/filename
示例
让我们看看 bash 终端中的 grep 示例。例如,在/etc/passwd文件中搜索单词“vivek”,输入:
$ grep 'vivek' /etc/passwd
示例输出:
vivek:x:500:100::/home/vivek:/bin/bash
在 /etc/passwd 文件中搜索单词 vivek 或 priyanka,输入:
$ grep -E -w 'vivek|priyanka' /etc/passwd
接下来,在目录 /nas/project 中的所有文件中搜索单词“main”:
$ grep -R 'main' *
当然,我们可以将搜索限制为单词。例如:
$ grep -Rw 'main' *
想要用颜色突出显示匹配的模式或单词?尝试传递选项--color:
$ grep --color -R 'main' *
或者尝试egrep 命令语法。例如:
$ grep -E --color -R 'foo|bar' *
忽略大小写
想要匹配 FOO 和 foo?尝试传递-i选项:
$ grep -i 'foo' filename
显示不匹配的行
您是否需要查找所有不匹配的行?假设显示除单词“Unix”之外的所有行:
$ grep -v 'Unix' input.txt
使用管道在文本流中搜索单词
shell 管道是一种无需任何临时文件即可将一个程序的输出连接到另一个程序的输入的方法。语法如下:
让我们使用 curl 命令和 grep 的组合来找出远程服务器名称:
$ command | grep 'something'
$ command | grep -E 'something|foo|bar'
$ curl -s -I https://www.example.com | grep -i server
总结
您可以在文本文件或管道中搜索字符串或单词,并返回包含成功匹配的行。您还可以通过传递-A(after) 和-Bbefore 选项来显示匹配文本之前或之后的指定行数:
我们还可以在匹配单词之前和之后显示指定行数。例如:
# Show a two lines after matching foo #
$ grep -A 2 'foo' file1
# Show a two lines before matching bar #
$ grep -B 2 'bar' file2
$ grep -C 2 '192.168.2.254' /etc/hosts
推荐阅读:
- 如何在 Linux / UNIX 中使用 grep 命令
- grep 中的正则表达式
- 使用 grep 命令搜索多个单词/字符串模式
- 快速 Shell 提示:使用 ps 命令查找某些内容时删除 grep 命令
- 智能搜索 Linux / UNIX 日志文件以查找警报或警告错误
获取帮助
尝试使用 man 命令或 info 命令或 help 命令阅读手册页。例如:
$ man grep
$ grep –help
$ info grep