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