grep命令

grep命令

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

一、语法格式:

grep 选项 参数 文件
Usage: grep [OPTION]... PATTERN [FILE]...

二、常用命令参数

-a  不要忽略二进制数据。
-A  <显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容
-b  在显示符合范本样式的那一行之外,并显示该行之前的内容
-c  计算符合范本样式的列数
-C <显示列数>或-<显示列数>  除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d <进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
-e <范本样式> 匹配多个样式
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-f <范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
-F 将范本样式视为固定字符串的列表
-G 将范本样式视为普通的表示法来使用
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称
-H 在显示符合范本样式的那一列之前,标示该列的文件名称
-i 忽略字符大小写
-l 列出文件内容符合指定的范本样式的文件名称
-L 列出文件内容不符合指定的范本样式的文件名称
-n 在显示符合范本样式的那一列之前,标示出该列的编号
-q 不显示任何信息
-R/-r 递归查询
-s 不显示错误信息
-v 反转查找
-w 正则匹配只包含完全字符的内容,如roo只匹配roo,不匹配root,roott等
-x 只显示全列符合的列
-y 此参数效果跟“-i”相同
-o 只输出文件中匹配到的部分

三、grep正则表达式

^         如:^zhang,表示匹配所有以zhang开头的行。
$         如:zhang$,表示匹配所有以zhang结尾的行。
.         匹配一个除换行符之外的字符,如:zha.g,匹配zha后接一个任意字符除换行符之外,然后是g。
*         匹配零个或多个先前字符,如:*zhang,匹配所有一个或多个字符后面紧跟grep的行。
.*        匹配任意一个字符出现零次或多次,结合在一起通常表示任意字符
[]        匹配一个指定范围内的字符,如:[zh]ang,匹配zang和hang。
[^]       匹配一个指定范围内的字符,如:[^A-DG-Z],匹配不包含A-D和G-Z字母开头的行        
\(..\)    标记匹配字符,如'\(love\)',love被标记为1。 
\<        锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    
\>        锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    
\<...\>   匹配只包含括号里面的单词的行,如匹配\<zhangjunchao\>,zhangjunchao110这种不匹配。
x\{m\}    重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。    
x\{m,\}   重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    
x\{m,n\}  重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   
\w        匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   
\W        \w的反置形式,匹配一个或多个非单词字符,如点号句号等。   
\b        单词锁定符,如: '\bgrep\b'只匹配grep。  

四、grep命令常见用法

注:此处所有的grep命令用法我将以a.txt文件里面的内容作为演示的参考

[root@iZwz9bhan5nqzh979qokrkZ ~]# cat /etc/passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

4.1 过滤关键字行
root@iZwz9bhan5nqzh979qokrkZ ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

4.2 过滤关键字行显示关键字在文本的行数
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

4.3 带颜色显示关键字在文本的行数字
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -n root --color /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

4.4 不区分大小写
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -i root --color /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

4.5 取反
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -v root --color /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
	
4.6 显示带关键字的行数
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -c root /etc/passwd
2

4.7 显示关键字行和后面的2行(总共3行)  After
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -A 2 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

4.8  显示关键字行和前面的2行  Before
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -B 2 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

4.9 匹配IP地址
[root@iZwz9bhan5nqzh979qokrkZ ~]# ifconfig eth0 | grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" 
        inet 172.18.108.103  netmask 255.255.240.0  broadcast 172.18.111.255
[root@iZwz9bhan5nqzh979qokrkZ ~]#  ifconfig eth0 | grep -E "([0-9]{1,3}\.){3}[0-9]"        
        inet 172.18.108.103  netmask 255.255.240.0  broadcast 172.18.111.255   
注:.有特殊意义,所以需要转义

4.10 将a.txt文件中不包含400的行输入到b.txt文件中
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep '.' a.txt  | grep -Ev "400"  > b.txt
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep '.' a.txt  | grep -Ev "(400|502|110|390)"  > b.txt
注:多个条件需要用到-E参数

4.11 递归查找
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -R -n --color "Hostname" /usr/local/zabbix
136:### Option: Hostname
139:#	Value is acquired from HostnameItem if undefined.
143:# Hostname=
145:Hostname=host-39-108-217-12

[root@iZwz9bhan5nqzh979qokrkZ ~]# grep -E -R -n --color "(Hostname|Server)" /usr/local/zabbix
82:### Option: Server
87:#	Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.domain
91:# Server=
93:Server=39.108.217.12
122:### Option: ServerActive
128:#	Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
132:# ServerActive=
134:# ServerActive=127.0.0.1
136:### Option: Hostname
139:#	Value is acquired from HostnameItem if undefined.
143:# Hostname=

注:-n:打印行号  --color:带颜色  -R:递归查询  -E:支持扩展正则
	
4.12 选项 -e:匹配多个匹配样式 -o:只输出匹配到的内容
[root@iZwz9bhan5nqzh979qokrkZ ~]# echo this is a text line | grep -e "is" -e "line" -o
is
is
line

4.13 搜索多个文件并查找匹配文本在哪些文件中:
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep 'zhangjunchao' /root -lr
/root/b.txt
/root/a.txt

4.14 在grep搜索结果中包括或者排除指定文件:

只在目录中所有的.php和.html文件中递归搜索字符"main()"
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep "main()" . -r --include *.{php,html}

在搜索结果中排除所有README文件
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep "main()" . -r --exclude "README"

在搜索结果中排除filelist文件列表里的文件
[root@iZwz9bhan5nqzh979qokrkZ ~]# grep "main()" . -r --exclude-from filelist

五、补充:grep使用多个查询条件?

1. \ | 符号法
[root@mail ~]# grep 'usrquota\ |grpquota' /etc/fstab

2. 使用多个-e参数
netstat -an | grep -e EST -e WAIT
并列使用多个-e参数可以实现或条件
	
3. 使用扩展-E
netstat -an | grep -E "ESTABLISHED|WAIT"
此处的 -E 是大写 ,匹配条件一定要加 引号

六、grep -q用法
grep -q用于if逻辑判断
https://blog.csdn.net/sim120/article/details/10151327

总结:grep命令其实是一个很强大的命令,工作中经常会用到,所以有必要总结一下,当然gerp命令的用法肯定不只是这么多,还有很多其他的用法,在这里就不一一列举了,这里展示的这些只是我工作中用到的一些,大家就各自脑补吧!

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值