找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux三剑客之grep

2019-7-22 05:05| 发布者: admin| 查看: 617| 评论: 0

摘要: 更多精彩,请点击上方蓝字关注我们! 前面,我们详细总结了linux shell特殊符号详解、重定向、linux正则表达式详解。在掌握了这些的基础上,依次详解三剑客配合正则的使用。下面,详细总结三剑客之grep的使用。 ...


更多精彩,请点击上方蓝字关注我们!


      前面,我们详细总结了linux shell特殊符号详解、重定向、linux正则表达式详解。在掌握了这些的基础上,依次详解三剑客配合正则的使用。下面,详细总结三剑客之grep的使用。

      grep可接收来自文件、标准输入或管道的输入。如果忘记了 指定文件,grep会等待键盘输入。如果输入来自管道,就会有另一条命令的输出通过管道变成grep命令的输入,如果匹配到找到的模式,会打印出来。




基本语法及常用选项

grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

(1)--color=auto:高亮显示匹配到的内容


(2)-v:反向选择

(3)-i:比较字符时忽略大小写

(4)-c:count统计,统计匹配结果的行数,不是匹配结果的次数

(5)-o:只显示匹配内容,其余的不显示

(6)-n:在输出结果显示行号

(7)-q:静默(脚本当中,返回值表示是否执行成功)

(8)-E:表示支持使用扩展的正则表达式元字符(+,?,|,(),()+)相当于egrep

(9)-A:输出满足条件的后几行

(10)-B:输出满足条件的前几行

(11)-C:前后都输出

(12)-e:同时列出几个匹配的内容

(13)-w:将表达式作为词来查找,相当于正则\<...\>,...表示定义的规则

(14)-f:使用模式文件进行搜索


常用选项:

(1)--color=auto:高亮显示匹配到的内容

[root@yanjiaxi ~]# grep --color=auto "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@yanjiaxi ~]# grep "root" /etc/passwd #alias设置别名
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

不高亮显示匹配内容:

[root@yanjiaxi ~]# "grep" "root" /etc/passwd #使用双引号
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@yanjiaxi ~]# 'grep' "root" /etc/passwd #使用单引号
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@yanjiaxi ~]# /bin/grep "root" /etc/passwd
#使用命令路径

root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

(2)-v:反向选择

[root@yanjiaxi ~]# grep -v "/bin/bash$" /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 #找出不以/bin/bash结尾的行或用户

[root@yanjiaxi regex]# cat test
My name is yanjiaxi.
#Welcome to my linux and PYTHON world.
My qq-email is 1104843323@qq.com
#My phone number is 18075147545

My wechart is w549859123
   good bye
I like python

[root@yanjiaxi regex]# grep -v "^$" test | grep -v "^#"
My name is yanjiaxi.
My qq-email is 1104843323@qq.com
My wechart is w549859123
   good bye
I like python

(3)-i:比较字符时忽略大小写

[root@yanjiaxi regex]# cat test
My name is yanjiaxi.
#Welcome to my linux and PYTHON world.
My qq-email is 1104843323@qq.com
#My phone number is 18075147545

My wechart is w549859123
   good bye
I like python
[root@yanjiaxi regex]# grep -i "python" test
#Welcome to my linux and PYTHON world.
I like python

(4)-c:count统计,统计匹配结果的行数,不是匹配结果的次数
[root@yanjiaxi regex]# grep -ic "python" test
2
[root@yanjiaxi regex]# grep -c "nologin$" /etc/passwd
40

(5)-o:只显示匹配内容,其余的不显示
[root@yanjiaxi regex]# grep -io "python" test
PYTHON
python

[root@yanjiaxi regex]# lscpu | grep -o vmx #检查是否可虚拟化

(6)-n:在输出结果显示行号
[root@yanjiaxi regex]# grep -in "python" test
2:#Welcome to my linux and PYTHON world.
9:I like python

(7)-q:静默(脚本当中,返回值表示是否执行成功)
[root@yanjiaxi regex]# cat demo2.sh
#!/bin/bash
if $(grep -q "yanjiaxi" /etc/passwd);then
   echo "yanjaixi exists"
else
   useradd yanjaixi
fi

(8)-E:表示支持使用扩展的正则表达式元字符(+,?,|,(),()+)相当于egrep
[root@yanjiaxi regex]# grep -E "[[:digit:]]+" test #相当于egrep
My qq-email is 1104843323@qq.com
#My phone number is 18075147545
My wechart is w549859123

(9)-A:输出满足条件的后几行
[root@yanjiaxi regex]# grep -A 1 "PYTHON" test
#Welcome to my linux and PYTHON world.
My qq-email is 1104843323@qq.com

(10)-B:输出满足条件的前几行
[root@yanjiaxi regex]# grep -B 1 "PYTHON" test
My name is yanjiaxi.
#Welcome to my linux and PYTHON world.

(11)-C:前后都输出
[root@yanjiaxi regex]# grep -C 1 "PYTHON" test
My name is yanjiaxi.
#Welcome to my linux and PYTHON world.
My qq-email is 1104843323@qq.com

(12)-e:同时列出几个匹配的内容
[root@yanjiaxi regex]# grep -e "^root" -e "^yanjiaxi" /etc/passwd
root:x:0:0:root:/root:/bin/bash
yanjiaxi:x:1000:1000:yanjiaxi:/home/yanjiaxi:/bin/bash

(13)-w:将表达式作为词来查找,相当于正则\<...\>,...表示定义的规则

(14)-f:使用模式文件进行搜索
[root@yanjiaxi regex]# cat demo1
root
^yanjiaxi
bash$
[root@yanjiaxi regex]# grep -f demo1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
yanjiaxi:x:1000:1000:yanjiaxi:/home/yanjiaxi:/bin/bash

未完待续

----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:Linux与数据库自学之道,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了