grep 命令 - 指南
grep 命令
grep 命令概述
grep 是 Linux 系统中核心命令之一,核心功能是从文本文件或管道数据流中筛选匹配的行及数据,与 sed(擅长修改文本)、awk(擅长格式化输出)并称为 Linux 操作文本的 “三剑客”,其中 grep 主打过滤功能。
grep 命令核心选项及示例
根据功能可将选项分为模式选择与解释、输出控制、查找文件、输出内容上下文控制四大类,以下是常用选项的详细说明及实操示例(示例中words为测试文本文件)。
模式选择和解释选项
此类选项用于定义匹配模式的规则,支持正则、多模式等需求:
| 选项 | 功能 | 示例 | |||
|---|---|---|---|---|---|
| -E | 支持扩展正则表达式,相当于 egrep 命令 | `[1aoma@she11 ~]s cat words | grep -E '(dog){3}'或[1aoma@she11 ~] cat words | egrep ‘(dog)[3}’`,输出 “dogdogdog”“dogdogdogdog”、、 | |
| -e | 使用多个 - e 选项匹配多个 PATTERNS | `[1aoma@she11 ~]s cat words | grep -e “cat” -e 'dog’或[1aoma@she11 ~]s cat words | egrep 'cat | dog’`,输出含 “cat” 或 “dog” 的行(如 “cat”“category”“dog” 等)、、 |
| -f | 从文件读取多个 PATTERNS | 先执行 [1aoma@she11~]s echo -e 'cat\ndog'>pattens_file 创建模式文件,再执行 `[1aoma@she11~] s cat words | grep -f pattens_file`,输出含 “cat” 或 “dog” 的行、、、 | ||
| -i | 忽略大小写匹配 | `[1aoma@she11 ~]s cat words | grep -i ‘cBt’`,输出 “cbt”、、 | ||
| -W | 匹配整个单词 | `[1aoma@she11 ~]s cat words | grep -w 'cat’或[1aoma@she11 ~]s cat words | grep ‘\bcat\b’`,输出 “cat”“hello cat”、、 | |
| -X | 匹配整行 | `[1aoma@she11 ~]s cat words | grep -x 'cat’或[1 |
[root@client ~ 11:19:05]# echo dogdogdogdog >>word
[root@client ~ 11:20:03]# echo dogdogdog >>word
[root@client ~ 11:20:12]# cat word | grep -E '(dog){3}'
dogdogdogdog
dogdogdog
[root@client ~ 11:20:13]# cat word | egrep '(dog){3}'
dogdogdogdog
dogdogdog
[root@client ~ 11:20:27]# cat word | grep -e 'cat' -e 'dog'
cat
category
acat
concatenate
dog
hello cat
dog
dogdogdogdog
dogdogdog
[root@client ~ 11:20:44]# echo -e 'cat\ndog' > newword
[root@client ~ 11:21:16]# cat newword
cat
dog
[root@client ~ 11:21:25]# cat word | grep -f newword
cat
category
acat
concatenate
dog
hello cat
dog
dogdogdogdog
dogdogdog
[root@client ~ 11:21:38]# cat word | grep -i 'cBt'
cbt
[root@client ~ 11:22:43]# cat word | grep -w 'cat'
cat
hello cat
[root@client ~ 11:22:59]# cat word | grep '\bcat\b'
cat
hello cat
[root@client ~ 11:23:13]# cat word | grep -x 'cat'
cat
[root@client ~ 11:23:27]# cat word | grep '^cat$'
cat
输出控制选项
此类选项用于控制匹配结果的输出形式:
| 选项 | 功能 | 示例 | |||
|---|---|---|---|---|---|
| -v | 反向匹配,显示与 PATTERNS 不匹配的项目 | `[1aoma@she11~]s cat words | egrep -v "^d | ^c",输出“acat”“hello cat”;也可用于忽略注释行和空白行,如 [1aoma@she11~]s egrep -v "^# | ^$" /etc/profile`、、 |
| -m | 控制最大匹配数目,匹配特定次数后停止匹配 | `[1aoma@she11~]s cat words | grep -m2 ‘dog’`,输出前 2 个含 “dog” 的行(“dog”“dogdog”)、、 | ||
| -C | 显示匹配到项目的数量 | `[1aoma@she11 ~]s cat words | grep -c ‘dog’`,输出 “4”(假设文件中含 4 个匹配行)、、 | ||
| -b | 显示匹配项目的字节偏移量 | `[1aoma@she11~]s cat words | grep -b ‘cat’`,输出 “0:cat”“4:category”“13:acat” 等、、 | ||
| -n | 显示匹配项目的行号 | `[1aoma@she11 ~]s cat words | grep -n ‘cat’`,输出 “1:cat”“2:category”“3:acat” 等、、 | ||
| -o | 只显示匹配到的内容,行中其他内容不显示 | `[1aoma@she11 ~]s cat words | egrep -o ‘(dog){3}’`,输出 “dogdogdog”“dogdogdog”、、 | ||
| -q | 不显示任何正常输出,用于脚本判定文件是否含特定内容,通过$?查看匹配结果 | 找到匹配时:`[1aoma@she11 ~] s cat words | egrep -q '(dog){3}'后执行[1aoma@she11~]$echo $?`,输出 “0”;未找到时输出 “1”、、、 | ||
| -S | 不显示任何错误输出 | [1aoma@she11~]s grep -s '^SELINUX=' /etc/shadow /etc/selinux/config,仅输出/etc/selinux/config:SELINUX=disabled,不显示权限错误、、 |
[root@client ~ 11:23:46]# cat word | egrep -v '^d|^c'
acat
hello cat
[root@client ~ 11:42:29]# cat word | grep 'dog'
dog
dog
dogdogdogdog
dogdogdog
[root@client ~ 11:42:56]# cat word | grep -m2 'dog'
dog
dog
[root@client ~ 11:43:02]# cat word | grep -m3 'dog'
dog
dog
dogdogdogdog
[root@client ~ 11:43:06]# cat word | grep -c 'dog'
4
[root@client ~ 11:43:17]# cat word | grep -b 'cat'
0:cat
4:category
13:acat
18:concatenate
70:hello cat
[root@client ~ 11:43:41]# cat word | grep -n 'cat'
1:cat
2:category
3:acat
4:concatenate
15:hello cat
[root@client ~ 11:43:48]# cat word | egrep -o '(dog){3}'
dogdogdog
dogdogdog
[root@client ~ 11:44:14]# cat word | egrep '(dog){3}'
dogdogdogdog
dogdogdog
[root@client ~ 11:44:45]# cat word | egrep -q '(dog){3}'
[root@client ~ 11:45:20]# echo $?
0
[root@client ~ 11:45:27]# cat word | egrep -q '(dog){3}acsafsa'
[root@client ~ 11:45:35]# echo $?
1
查找文件选项
此类选项用于递归查找目录中的文件,或控制文件筛选规则。
| 选项 | 全称 / 功能说明 | 示例 | |
|---|---|---|---|
-r | --recursive,递归查找目录中的所有文件(不跟随软链接) | 递归查找/etc目录中含 “SELINUX=” 的文件:grep -r '^SELINUX=' -S /etc输出:/etc/selinux/config:SELINUX=disabled | |
-R | --dereference-recursive,递归查找并跟随软链接 | 用法与-r一致,仅多了 “跟随软链接”:grep -R '^SELINUX=' -S /etc | |
-h | --no-filename,不显示匹配内容所在的文件名 | 递归查找时仅显示匹配内容:grep -r '^SELINUX=' -S -h /etc输出:SELINUX=disabled(无路径) | |
-H | --with-filename,显示匹配内容所在的文件名(默认) | 递归查找时显示路径:grep -r '^SELINUX=' -S -H /etc输出:/etc/selinux/config:SELINUX=disabled | |
-l | --files-with-matches,仅显示包含匹配内容的文件名 | 显示/etc中含 “SELINUX=” 的文件:grep -r '^SELINUX=' -S -l /etc输出:/etc/selinux/config | |
-L | --files-without-match,仅显示不包含匹配内容的文件名 | 显示/etc中不含 “SELINUX=” 的最后 5 个文件:`grep -r ‘^SELINUX=’ -S -L /etc | tail -5 <br>输出:如/etc/gdm/custom.conf、/etc/nfs.conf` 等 |
--include=GLOB | 仅查找符合 GLOB 模式的文件(如.conf后缀) | 递归查找/etc中.conf文件里的 “SELINUX=”:grep -r '^SELINUX=' -S --include='*.conf' /etc | |
--exclude=GLOB | 跳过符合 GLOB 模式的文件 | 递归查找时跳过.log文件:grep -r 'pattern' -S --exclude='*.log' /etc |
输出内容上下文控制选项
此类选项用于显示匹配行的前后上下文(如前 N 行、后 N 行),便于查看匹配内容的周边信息。
| 选项 | 全称 / 功能说明 | 示例 | ||
|---|---|---|---|---|
-B | --before-context=NUM,显示匹配行及前 NUM 行 | 查找 IP“10.1.8.88” 并显示前 2 行:`ip addr | grep ‘10.1.8.88’ -B2`输出:匹配行的前 2 行 + 匹配行 | |
-A | --after-context=NUM,显示匹配行及后 NUM 行 | 查找 “ens32:” 并显示后 2 行:`ip addr | grep ‘ens32:’ -A2`输出:匹配行 + 匹配行的后 2 行 | |
-C | --context=NUM,显示匹配行及前后各 NUM 行(等效于-NUM) | 查找 “10.1.8.88” 并显示前后各 2 行:`ip addr | grep ‘10.1.8.88’ -C2<br>或ip addr | grep ‘10.1.8.88’ -2`输出:匹配行的前 2 行 + 匹配行 + 匹配行的后 2 行 |
--color[=WHEN] | 高亮显示匹配内容(WHEN:always强制高亮、never不高亮、auto自动) | 高亮匹配 “cat” 的内容:`cat words | grep --color=auto ‘cat’`输出 |
浙公网安备 33010602011771号