linux三剑客之grep

1.先说grep是什么?

GREP全称是:Globally search a Regular Expression and Print。翻译下来大概就是:在全球范围内搜索正则表达式和打印。

grep命令在文本中查找指定的字符串,从grep的全称中可以了解到,grep是一个可以利用"正则表达式"进行"全局搜索"的工具,grep会在文本文件中按照指定的正则进行全局搜索,并将搜索出的行打印出来。

当然,不使用正则表达式时也可以使用grep,但是当grep与正则表达式结合在一起时,威力更强大。

2.grep的基本操作

[root@bogon ~]# cat test.txt 
aaa bbb
ccc ddd
AAA ccc
lishuang
[root@bogon ~]# cat test.txt  | grep "aaa"
aaa bbb
[root@bogon ~]# cat test.txt  | grep "lishuang"
lishuang

2.1 可以看到,并没有把AAA的行给列出来,因为默认情况下是区分大小写的,如果不区分大小写,需要-i选项

[root@bogon ~]# cat test.txt | grep -i "aaa"
aaa bbb
AAA ccc

2.2 添加-n 选项则可以把行号显示出来

[root@bogon ~]# cat test.txt | grep -i  -n "aaa"
1:aaa bbb
3:AAA ccc

2.3 添加--color选项可以将匹配到的字符 以高亮的方式显示 但是这个文档是显示不出来的,默认color选项为auto状态,不用显式的指定"--color"选项,默认就会高亮显示被匹配到的关键字

[root@bogon ~]# cat test.txt | grep -i --color  -n "aaa"
1:aaa bbb
3:AAA ccc

2.4 添加-o选项如果我们想只显示与字符相匹配的内容,并不想整行都显示出来

[root@bogon ~]# cat test.txt | grep   -o -i  "aaa"
aaa
AAA

2.5 添加-c选项则表示,匹配的字段一共是多少行

[root@bogon ~]# cat test.txt | grep -i  -c  "aaa"
2
[root@bogon ~]# cat test.txt | grep   -c  "aaa"
1

2.6 这时候就会有聪明的人想到了,那么显示匹配的字段一共是多少个的时候,可以-c和-o选项一块使用,这样就可以解决了

[root@bogon ~]# cat test.txt | grep  -c  -o -i  "aaa"
2

2.7 当我们想要找个人信息,想要除匹配到的行,在显示n行,那么应该怎么做呢?

添加-B选项代表 显示之前的行   

添加-A选项代表 显示之后的行   

添加-C选项 就是-A和-B的结合 比如: -C1 代表的就是 显示之前的一行,显示之后的一行,用于同类型数据

当然不论是-A还是-B 或者-C后面加的一定是显示n行的内容比如

[root@bogon ~]# cat test2.txt 
name:abc
age:123
address:beijing

name:bcd
age:456
address:beijing

name:dvd
age:789
address:shanghai

[root@bogon ~]# cat test2.txt  | grep dvd
name:dvd

[root@bogon ~]# cat test2.txt  | grep -A2 "dvd"
name:dvd
age:789
address:shanghai
[root@bogon ~]# cat test2.txt  | grep -A1 -B1 "age:789"
name:dvd
age:789
address:shanghai
[root@bogon ~]# cat test2.txt  | grep -C1 "age:789"
name:dvd
age:789
address:shanghai



 

2.8 精准查找

什么是精准查找?

比如我们查找字符串"aaa",但是他不仅显示了"aaa"字符,也显示包含aaa的行

[root@bogon ~]# cat test3.txt 
aaabbb
aaa123
aaa
[root@bogon ~]# cat test3.txt  | grep "aaa"
aaabbb
aaa123
aaa

 那应该什么做呢?

添加-w选项,进行精准查找,只有作为一个独立的单词存在的时候,才会被匹配到,"zsy"包含于某个字符串的时候,则不会被匹配到,这就是所谓的精确匹配,"-w"有word之意,表示搜索的字符串作为一个独立的单词时才会被匹配到

[root@bogon ~]# cat test3.txt  | grep "aaa"
aaabbb
aaa123
aaa
[root@bogon ~]# cat test3.txt  | grep -w "aaa"
aaa

 

2.9 反向查找

当我们需要查找不包含某行的字符串,应该怎么做呢?

添加-v选项 进行反向查找

[root@bogon ~]# cat test3.txt  | grep -w "aaa"
aaa
[root@bogon ~]# cat test3.txt  | grep -w -v "aaa"
aaabbb
aaa123

2.10 多个目标匹配

当我们需要匹配多个字符串的时候应该怎么做呢?

添加-e选项 进行多字符匹配,从下图可以看出我们同时匹配了"123"和"bbb"的字符串

[root@bogon ~]# cat test3.txt 
aaabbb
aaa123
aaa
[root@bogon ~]# cat test3.txt  | grep -e "123" -e "bbb"
aaabbb
aaa123

2.11 根据变量判断是否存在

无论是文件和字符串都可以这样使用

添加选项-q 静默模式 代表无论是否有结果都不显示 执行结果可以结合$?使用

从下图我们可以看出 当grep命令执行成功则返回值为0,相反失败返回值则为1

[root@bogon ~]# cat test3.txt  | grep -e "123" -e "bbb"
aaabbb
aaa123
[root@bogon ~]# echo $?
0
[root@bogon ~]# cat test3.txt  | grep -e "liaaaaa" 
[root@bogon ~]# echo $?
1

结合-q选项使用 试一下

这种使用方式在shell中是比较常见的,可以用来判断目录,文件和字符串是否存在

[root@bogon ~]# cat test3.txt  | grep -q   "bbb" 
[root@bogon ~]# echo $?
0
[root@bogon ~]# cat test3.txt  | grep -q   "sajfwptuapto" 
[root@bogon ~]# echo $?
1


3.结合正则表达式来使用grep

等待更新...

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值