2.grep使用手册

2.grep使用手册

grep命令实践

grep 是 Linux 系统中最重要的命令之一,其功能是从文本文件或管道数据流中筛选匹配的行及数据。

Linux操作文本的三大利器,简称三剑客,分别是:

  • grep:擅长过滤。
  • sed:擅长修改文本。
  • awk:擅长格式化输出。

grep 命令语法

  1. 过滤管道:command | grep [OPTION]... PATTERNS
  2. 过滤文件:grep [OPTION]... PATTERNS [FILE]...

模式选择和解释选项

-E

支持扩展正则表达式,相当于egrep

bash 复制代码
[root@server ~ 09:55:00]# cat words |grep -E 'cat|dog'
cat
concatenate
dog
hello cat kitty
dogdog
dogdogdog
dogdogdogdog
-e

使用多个 -e 选项匹配多个PATTERNS

bash 复制代码
[root@server ~ 09:55:43]# cat words |grep -e 'cat' -e 'dog'
cat
concatenate
dog
hello cat kitty
dogdog
dogdogdog
dogdogdogdog
-i

忽略大小写

bash 复制代码
[root@server ~ 09:51:47]# echo 'Is is the cost of of gasoline going up up?' | egrep -i '([a-Z]+)\s\1'
Is is the cost of of gasoline going up up?
-f 选项

从文件读取多个 PATTERNS

bash 复制代码
[root@server ~ 09:58:06]# echo -e 'cat\ndog' > pattens_file
[root@server ~ 10:02:39]# cat pat_file
cat
dog
[root@server ~ 10:02:45]# cat wor grep -f pattens_file 
cat
concatenate
dog
hello cat kitty
dogdog
dogdogdog
dogdogdogdog
-w 选项

匹配整个单词。

bash 复制代码
[root@server ~ 10:02:51]#  cat words | grep -w 'cat'
cat
hello cat kitty
-x 选项

匹配整行。

bash 复制代码
[root@server ~ 10:04:25]# cat words | grep -x 'cat'
cat

输出控制选项

-v 选项

反向匹配,显示与PATTERNS不匹配的项目。

bash 复制代码
[root@server ~ 16:12:12]# cat /etc/profile |egrep -v '^\s*#|^$'

[root@server ~ 10:08:34]# cat words | egrep -v '^d|
hello cat kitty
-m 选项

控制最大匹配数目,匹配特定次数后停止匹配。

bash 复制代码
[root@server ~ 10:34:06]# cat words |grep -m3 'dog'
dog
dogdog
dogdogdog
-c 选项

显示匹配到项目的数量。

bash 复制代码
[root@server ~ 10:34:17]# cat words |grep -c 'dog' 
4
-b 选项

显示匹配项目的字节偏移量。

bash 复制代码
[root@server ~ 10:42:16]# head -5 words 
cat
concatenate
cbt
c1t
cCt
[root@server ~ 10:42:19]# cat words | grep -b 'cat'
0:cat
4:concatenate
40:hello cat kitty
-n 选项

显示匹配项目的行号。

bash 复制代码
[root@server ~ 10:34:29]# cat words |grep -n 'dog' 
8:dog
14:dogdog
15:dogdogdog
16:dogdogdogdog
-o选项

只显示匹配到的内容,行中其他内容不显示。

bash 复制代码
[root@server ~ 10:34:47]# cat words |grep -o 'dog' 
dog
dog
dog
dog
dog
dog
dog
dog
dog
dog
-q 选项

不显示任何正常输出。一般用于脚本判定文件中是否包含特定内容。

通过特殊变量 $? 查看是否匹配到内容

bash 复制代码
[root@server ~ 10:35:53]# cat words | egrep -q '(dog){3}'
[root@server ~ 10:35:58]# echo $?
0
[root@server ~ 10:36:03]# cat words | egrep -q '(dogassdsf){3}'
[root@server ~ 10:36:10]# echo $?
1
-s 选项

不显示任何错误输出。

bash 复制代码
[zhang@server ~ 10:41:35]$ grep '^SELINUX=' /etc/shadow 
grep: /etc/shadow: Permission denied


[zhang@server ~ 10:36:43]$ grep -s '^SELINUX=' /etc/shadow 

#shell 先执行cat words,把执行结果
[zhang@server ~ 10:35:21]$ cat words | egrep -q '(dog){3}'
cat: words: No such file or directory

查找文件选项

-r -R 选项
  • -r,递归匹配目录。
  • -R,递归匹配目录,跟随软链接。
bash 复制代码
[root@server ~ 10:42:54]# grep -r '^SELINUX=' -s /etc
/etc/selinux/config:SELINUX=disabled
[root@server ~ 10:58:41]# grep -R '^SELINUX=' -s /etc
/etc/sysconfig/selinux:SELINUX=disabled
/etc/selinux/config:SELINUX=disabled
[root@server ~ 10:58:51]# ll /etc/sysconfig/selinux
lrwxrwxrwx. 1 root root 17 Nov  7 09:29 /etc/sysconfig/selinux -> ../selinux/config
-h 和 -H 选项
  • -h,不显示匹配项目所在文件的文件名。
  • -H,显示匹配项目所在文件的文件名,默认情况使用该选项。
bash 复制代码
[root@server ~ 10:59:02]# grep -r '^SELINUX=' -s /etc -h
SELINUX=disabled
[root@server ~ 10:59:18]# grep -r '^SELINUX=' -s /etc -H

输出内容控制选项

-B 选项

显示匹配项目本身,以及前多少行。

bash 复制代码
[root@server ~ 11:09:38]# ip address |grep 'ens32:'
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

[root@server ~ 11:10:51]# ip address |grep '00:0c:29:5a:20:97' -B1
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5a:20:97 brd ff:ff:ff:ff:ff:ff
-A 选项

显示匹配项目本身,以及后多少行。

bash 复制代码
[root@server ~ 11:10:06]# ip address |grep 'ens32:' -A1
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5a:20:97 brd ff:ff:ff:ff:ff:ff
-C 选项

显示匹配项目本身,以及前后多少行。

bash 复制代码
[root@server ~ 11:11:12]# ip address |grep '00:0c:29:5a:20:97' -C1
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5a:20:97 brd ff:ff:ff:ff:ff:ff
    inet 10.1.8.10/24 brd 10.1.8.255 scope global noprefixroute ens32
相关推荐
测试员周周6 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
在角落发呆10 小时前
Linux转发配置:解锁网络互联的核心密码
linux·运维·网络
裴东青11 小时前
10-实战:RuoYi-Cloud的自动化发布
运维·ci/cd·自动化
哎呦,帅小伙哦11 小时前
Linux 时间:从原子钟到 clock_gettime 的每一面
linux·运维·服务器
sxgzzn12 小时前
新能源场站数智化转型:基于数字孪生与AI的智慧运维管理平台解析
大数据·运维·人工智能
张小姐的猫12 小时前
【Linux】多线程 —— 线程互斥
linux·运维·服务器·c++
CodeMartain12 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
xxx1x1x12 小时前
极客向:DLL/运行库故障的底层逻辑与自动化修复方案
运维·自动化·dll文件·dll·dll修复·dll缺失·dll一键修复
YuanDaima204812 小时前
Linux 进阶运维与 AI 环境实战:进程管理、网络排错与 GPU 监控
linux·运维·服务器·网络·人工智能
lolo大魔王14 小时前
Linux 数据文件处理实战:排序、搜索、压缩、归档一站式详解
linux·运维·服务器