Kevin_306

05-正则表达式-grep 20210202 (二)

文本处理三剑客 

grep 命令主要对文本的(正则表达式)行基于模式进行过滤

sed:stream editor,文本编辑工具

awk:Linux上的实现gawk,文本报告生成器

4.1 文本处理三剑客之 grep

 grep: Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行

 常见选项如下图:

      

    

 范例:配合管道符号使用

1 [13:25:28 root@CentOS8 ~]#cat /etc/passwd |grep root
2 root:x:0:0:root:/root:/bin/bash
3 operator:x:11:0:operator:/root:/sbin/nologin
4 [13:25:38 root@CentOS8 ~]#grep root /etc/passwd
5 root:x:0:0:root:/root:/bin/bash
6 operator:x:11:0:operator:/root:/sbin/nologin
7 [13:26:00 root@CentOS8 ~]#cut -d: -f1 /etc/passwd |grep root
8 root

 grep支持多个文件过滤

[14:12:26 root@CentOS8 ~]#grep root /etc/passwd /etc/group
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:

grep这个是给别名,看一下grep的位置,要使用原始的gerp,加个单引号‘ ’ 

[14:19:23 root@CentOS8 ~]#which grep
alias grep='grep --color=auto'
	/usr/bin/grep

 匹配所有包含bin目录的字符串的行

[14:29:17 root@CentOS8 ~]#grep bin /etc/passwd

 如果只要看前三行或者前一行,前面加 -m 3或者- m 1

-v  显示不被pattern匹配到的行,发现一个都没有

为了看下效果换成nologin来看看:

[15:57:14 root@CentOS8 ~]#grep -v nologin /etc/passwd

 -n  显示匹配的行号 ,显示25行:

[15:53:28 root@CentOS8 ~]#grep -n bin /etc/passwd

 -c  统计匹配的行数,统计结果是25行:

[15:55:49 root@CentOS8 ~]#grep -c root /etc/passwd

 -o  仅显示匹配到的字符串,比较多,截取一部分:

[15:56:06 root@CentOS8 ~]#grep -o bin /etc/passwd

 也可以配合管道符号使用,以nologin为例

[16:05:27 root@CentOS8 ~]#grep -o nologin /etc/passwd

  同时还可以统计一下出现的次数

[16:05:31 root@CentOS8 ~]#grep -o nologin /etc/passwd |wc -l

 

 命令之间也可以混合使用:此处-n和-o同时使用

[16:41:55 root@CentOS8 ~]#grep -no nologin /etc/passwd

 -q  静默模式,不输出任何信息,所以我们通过$?来看一下到底有没有 输出信息 

[17:05:01 root@CentOS8 ~]#grep -q root /etc/passwd
[17:05:07 root@CentOS8 ~]#echo $?
0
[17:05:09 root@CentOS8 ~]#grep -q root1 /etc/passwd(#错误的信息root1)
[17:05:19 root@CentOS8 ~]#echo $?
1

 

另外一个办法也可以实现,

[17:05:21 root@CentOS8 ~]#grep rooter /etc/passwd &> /dev/null

 -e  实现多个选项间的逻辑or关系,如:grep –e ‘cat ’  -e ‘dog’  file

[19:56:27 root@CentOS8 ~]#grep -e root -e bash /etc/passwd 

  

从管道中读取命令执行的结果,然后根据关键字过滤

[20:14:29 root@CentOS8 ~]#grep root /etc/passwd |grep bash
root:x:0:0:root:/root:/bin/bash
[20:14:47 root@CentOS8 ~]#grep root /etc/passwd |grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 

 -f 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

[20:58:46 root@CentOS8 ~]#cat a1.txt 
xiaowang
mage
[20:58:52 root@CentOS8 ~]#cat a2.txt
I am xiaowang
mageedu
I love linux
I am n50 student
[20:58:58 root@CentOS8 ~]#grep -f a1.txt a2.txt
I am xiaowang
mageedu

 

-R  可以递归目录,搜索文件夹

1#使用grep取出网络IP

[root@centos8 ~]#ifconfig eth0| grep netmask | tr -s ' '  | cut -d' ' -f 3
10.0.0.8

2#使用正则表达式取值

[root@centos8 ~]#ifconfig eth0| grep netmask | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' |head -1
10.0.0.8

   -o  仅显示匹配到的字符

 如果ifconfig没有的话,使用yum -y install net-tools安装

 

 学习笔记仅供参考 211006

posted on 2021-02-02 18:51  熊猫小虾  阅读(99)  评论(0编辑  收藏  举报

导航