13Linux三剑客之grep命令

Linux三剑客之grep命令

Linux grep 命令用于查找文件里符合条件的字符串

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据

grep命令一般用来筛选数据,一般用来筛选我们需要的数据

语法

grep [参数] [过滤规则] [路径]


标准输出

 | grep [参数][过滤规则]
 


参数

-n : 显示过滤出来的文件在文件当中的行号
-o : 只显示匹配到的内容
-q : 静默输出(一般用来shell脚本当中)
-i : 忽略大小写
-c : 显示匹配到的行数
-v :反向查找
-w : 匹配某个词
-E :使用扩展正则
-R :递归查询
-l : 只打印文件路径


扩展参数:
-A :显示匹配到的数据的后几n行
-B :显示匹配到的数据的前几n行
-C :显示匹配到的数据的前后各几n行

知识储备:
$?	: 代表上一条命令执行是否成功(0:成功,非0代表失败)
词  :一连串字母和数字组成的字符串
wc -l : 打印显示有多行

案例1: 要求过滤出/etc/passwd中包含的root的行及其行号

[root@localhost hhh]#grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

案例2:要求过滤出/etc/passwd中包含的root的行,只显示过滤到的内容

[root@localhost hhh]#grep -o 'root' /etc/passwd
root
root
root
root

案例3: 计算/etc目录下包含root的文件有多少个?

[root@localhost hhh]#grep -lR 'root' /etc | wc -l 
140

案例4:查询/etc/passwd文件中包含/bin/bash的行并输出行号

[root@localhost hhh]#grep  -n 'bin/bash' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
21:text:x:1000:1000::/home/text:/bin/bash
22:test1:x:1001:1001::/home/test1:/bin/bash
23:test:x:1002:1002::/home/test:/bin/bash

正则表达式

正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

普通正则表达式

*			:匹配零个或多个前导字符
$ 			:以前导字符结尾
.			:匹配任意一个字符(换行符除外)
^			:以 后导字符开头的行
[^]			:取反
.*			:所有的字符的任何个数
[]			: 或者(其中包含的所有的字符的或者)
[a-z]		:a-z所有的一个字母
[A-Z]		:A-Z所有的一个字母
[0-9]		:0-9所有的一个数字

扩展正则表达式(grep 必须加-E参数,或者使用egrep命令)

egrep  等价于  grep -E 


+			: 前导字符的一个或多个
?			: 前导字符的零个或一个
|			:  或者(竖线两边的字符的或者)
()			: 分组,组成一个整体	
\n      	:  n代表的是前面第几个分组
{m,n}		:  范围,至少有m个,最多有n个
{m}			:  范围,固定m个
{m,}		: 范围,至少有m个

案例1:匹配包含aa的行

grep 'aa' demo.txt egrep 'a{2}' demo.txtegrep 'aaa?' demo.txtegrep 'aa+' demo.txt 

案例1:要求打印出/etc/nginx/nginx.conf中的不是以#开头的行

 grep "^[^#]" /etc/nginx/nginx.conf

案例2:要求匹配出本机中所有的普通用户

普通用户:  uid >=1000的
egrep ":[0-9]{4}" /etc/passwd

案例3:查询出包含 22 或者 33 的行

egrep "22|33" demo.txt

案例4;要求匹配出包含1234abcd1234abcd的行

grep -E "(1234)(abcd)\1\2" 1.txt 

练习5:过滤出当前系统IP

ip a | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"


[root@localhost hhh]#ip a | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" 
127.0.0.1
192.168.15.200
192.168.15.255
172.16.1.200
172.16.15.255
posted @ 2021-10-09 20:38  OVO_3V3  阅读(122)  评论(0)    收藏  举报