linux基础07——grep

1. 概念

grep 命令是一种强大的文本搜索工具,它能使用正则表达式,按照指定的模式去匹配,并把匹配的行打印出来。需要注意的是,grep 只支持匹配而不能替换匹配的内容,替换的功能可以由 sed 来完成。

2. 示例

1. 把包含 syslog 的行过滤出来

[root@localhost grep]# cat grep.txt 
0root:a:9:1:root:/root:/bin/gzd
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
syslog:x:104:108:/home/syslog:/bin
ntp:x:108:112:/home/shell:/bin
sshd:x:110:121:sshd:/usr/sbin/nologin
[root@localhost grep]# grep "syslog" grep.txt 
syslog:x:104:108:/home/syslog:/bin
[root@localhost grep]# grep -i "SysLog" grep.txt 
syslog:x:104:108:/home/syslog:/bin
[root@localhost grep]# 

2. 把以 ntp 开头的行过滤出来

[root@localhost grep]# grep "^ntp" grep.txt 
ntp:x:108:112:/home/shell:/bin

3. 把 nologin 结尾的行过滤出来

[root@localhost grep]# grep "nologin$" grep.txt 
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
sshd:x:110:121:sshd:/usr/sbin/nologin
[root@localhost grep]# 

4. 把匹配 syslog 的行以及下边的两行过滤出来

[root@localhost grep]# grep -A2 "syslog" grep.txt 
syslog:x:104:108:/home/syslog:/bin
ntp:x:108:112:/home/shell:/bin
sshd:x:110:121:sshd:/usr/sbin/nologin

5. 把包含 syslog 及上边的一行过滤出来

[root@localhost grep]# grep -B1 "syslog" grep.txt 
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
syslog:x:104:108:/home/syslog:/bin

6. 把包含 syslog 以及上、下一行的内容过滤出来

[root@localhost grep]# grep -C1 "syslog" grep.txt 
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
syslog:x:104:108:/home/syslog:/bin
ntp:x:108:112:/home/shell:/bin

7. 过滤某个关键词,并输出行号

[root@localhost grep]# grep -n "ntp" grep.txt 
4:ntp:x:108:112:/home/shell:/bin

8. 过滤不包含某关键词并输出行号

[root@localhost grep]# grep -n -v "ntp" grep.txt 
1:0root:a:9:1:root:/root:/bin/gzd
2:mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
3:syslog:x:104:108:/home/syslog:/bin
5:sshd:x:110:121:sshd:/usr/sbin/nologin

9. 删除掉空行

[root@localhost grep]# grep -v "^$" grep.txt 
0root:a:9:1:root:/root:/bin/gzd
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
syslog:x:104:108:/home/syslog:/bin
ntp:x:108:112:/home/shell:/bin
sshd:x:110:121:sshd:/usr/sbin/nologin

10. 过滤包含 root 或 syslog 的行

[root@localhost grep]# grep -e "root" -e "syslog" grep.txt 
0root:a:9:1:root:/root:/bin/gzd
syslog:x:104:108:/home/syslog:/bin

11. 查看当前目录中包含某关键词的所有文件

[root@localhost grep]# grep -r "font" .
[root@localhost grep]# grep -rnw "font" .
[root@localhost grep]# grep -rnw --exclude-dir={.git,svn} "mail"
匹配到二进制文件 .grep.txt.swp
grep.txt:2:mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

3. 语法

grep 的常见选项

  • -A:除了匹配行,额外显示该行之的N行

  • -B:除了匹配行,额外显示该行之的N行

  • -C:除了匹配行,额外显示该行前后的N行

  • -c:统计匹配的行数

  • -e实现多个选项间的逻辑 or 关系

  • -E支持扩展的正则表达式

  • -F:相当于 fgrep

  • -i忽略大小写

  • -n:显示匹配的行号

  • -o:仅显示匹配到的字符串

  • -q:安静模式,不输出任何信息,脚本中常用

  • -s:不显示错误信息

  • -v显示不被匹配到的行

  • -w:显示整个单词

  • --color:以颜色突出显示匹配到的字符串

部分参考公众号【Linux学习】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值