grep 文本搜索工具

显示包含root的行

grep root /etc/passwd

-v 显示不被模式匹配的行

grep -v $USER /etc/passwd

-i 忽略大小写

grep -i $USER /etc/passwd

-n 显示匹配的行号

grep -n $USER /etc/passwd

-c 统计匹配的行数

grep -c $USER /etc/passwd

-o 显示匹配的字符串

grep -o $USER /etc/passwd

-q 不输出任何信息

grep -q $USER /etc/passwd

-A 后几行

grep -A3 $USER /etc/passwd

-B 前几行

grep -B3 $USER /etc/passwd

-C 前后各几行

grep -C3 $USER /etc/passwd

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

grep -e root -e redis /etc/passwd

-w 匹配整个单词

grep -w root /etc/passwd

正则表达式

基本正则表达式

扩展正则表达式

元字符:字符匹配 匹配次数 位置锚定 分组

一个点. 代表一个字符

[root@contes7 ~]# echo abc|grep a.c

abc

grep是贪婪模式

过滤a和f之间包含x或r或c的字符

echo axfdsf |grep "a[xrc]f"

匹配次数

* 代表某一个字符出现的次数 包括0次或多次

echo ab |grep "ax*b" 代表x出现了0从

.* 代表任意长度的,任意字符串

\? 匹配的前面的字符出现0或一次

echo abccdd |grep "a[a-z]\?c" 值是abc

\+ 代表前面的字符出现一个以上

\{n\} 匹配前面的字符n次

\{m,n\}匹配前面的字符至少m次,最多n次

\{,n\} 匹配前面的字符最多n次

\{n,\}匹配前面的支持最少n次

ifconfig ens33|grep netmask |grep -o "[0-9.]\{7,\}" |head -n1

ifconfig ens33 |grep -o "inet [0-9.]\+" |cut -d" " -f2

分区利用率

df |grep /dev/sda |grep -o "[0-9]\{,3\}%" |sort -nr |head -n1 |grep -o "[0-9]\+"

位置锚定

^ 行首

grep "^root" /etc/passwd

$ 行尾锚定

grep "bash$" /etc/passwd

^$ 代表空行

\< 字符的左侧,以字符开头的行

grep "\<root" /etc/passwd

\> 字符的右侧,以字符结尾的行

grep "root\>" /etc/passwd

grep "\<root\>" /etc/passwd

分组

wang重复出现3次

echo wangwangwang |grep "\(wang\)\{3\}"

后向引用

echo wangwangwangxxxxxxwangwangwang |grep "\(wang\)\{3\}.*\1"

echo wangwangwangxxxxxxmagemagemagewangwangwangmagemagemage |grep "\(wang\)\{3\}.*\(mage\)\+\1.*\2"

a或b开头的行

grep "^\(a\|b\).*" /etc/passwd

cat /etc/centos-release |grep -o ' [0-9]\+' |grep -o "[0-9]"

扩展正则表达式

cat /etc/centos-release |egrep -o ' [0-9]+' |grep -o "[0-9]"

cat /etc/centos-release |grep -Eo ' [0-9]+' |grep -o "[0-9]"

grep 支持正则表达式支持字符串

grep 是一个文本过滤工具

egrp:基本正则表达式

fgrp:扩展正则表达式

grep的命令格式     “grep 目标 文件”

grep还支持变量    “grep $ 变量 文件”

grep还支持命令    “grep 命令 文件”

grep数标准输入,所有可以和管道符结合

标准输出 | grep标准输入

“grep 命令 文件” grep命令格式的示例

clip_image002

grep包含root的行 - 副本

“grep -v 目标 文件” 显示不包含目标的其他内容。 下面表示非#号开头的行

clip_image004

grep -v非

clip_image006

“grep -i 目标 文件” 忽略目标的大小写

clip_image006[1]

clip_image008

grep -i忽略大小写 - 副本

“grep -n 目标 文件” 目标文件在第几行

clip_image006[2]

,并显示序列号

clip_image010

grep -n 看目标在什么行

“grep -c 目标 文件” 查看目标这个有几行

clip_image006[3]

clip_image012

grep -c 看总共有几行 - 副本

“grep -o 目标 文件” 只显示相关的字符,一行的其他不显示

clip_image006[4]

clip_image014

只显示这个字符,不显示其他

“grep -q 目标 文件” 不显示输出的内容,可以用 echo $?查看, 非0代表没有找到目标

clip_image006[5]

clip_image016

grep -p 不显示结果 - 副本

“grep -A 目标 文件” A后面加个数字包含目标的后几行

clip_image006[6]

clip_image018

grep -A 加数字显示后几行 - 副本

“grep -B 目标 文件”  B后面加数字显示包含目标的前几行

clip_image006[7]

clip_image020

grep -B 后面加个数字显示目标的前几行 - 副本

“grep -C 目标 文件” C前面加个数字显示包含目标的前后几行

clip_image006[8]

clip_image022

grep -C 后面加数字显示目标的前后几行 - 副本

“grep -e 目标1 -e 目标2 文件” 包括目标1或者目标2 或者的关系,一行不显示两目标

clip_image006[9]

clip_image024

grep -e 或者的关系 - 副本

“”grep -w 单词 文件“” 在文件里面是单词的目标

clip_image006[10]

clip_image026

grep -w 是一单词为目标的 - 副本

字母数字加下划线都是字母的一部分,其他都不是字母的一部分

clip_image006[11]

clip_image028

grep-w加特殊字符不是单词 - 副本

grep -f 后面是跟的文件,将目标放在几个文件里面 ,然后执行grep -f

clip_image006[12]

clip_image030

grep -f 将目标写到一个文件

clip_image006[13]

clip_image032

grep -f 执行的结果

正则表达式

处理文本内容 通过特定的符号来匹配或者控制

BRE 基本正则表达式

ERE 扩展正则表达式

元字符分类:字符匹配 ,匹配次数, 位置锚定, 分组

字符匹配

. 表示文件内容任意一个字符“a..d” abcd 两个..表示两个字符。a代表一个字符,.代表一个字符,c代表一个字符

clip_image006[14]

clip_image034

正则表达式 字符。描述

[ . ] 点放在中括号 代表.点的本意

转义 \ . 代表. 点字符的本意,中间的点转义到原来.的意思

clip_image006[15]

clip_image036

grep 正则表达式字符转义 - 副本

grep “r[abc]t” 取中括号里面的任意的一个字符

clip_image006[16]

clip_image038

grep正则表达式中括号任意一个字符

grep “r[^abc]t” 除了中括号里面的任意字符

clip_image006[17]

clip_image040

grep正则表达式除了中括号里面的任意一个字符

匹配次数 :某一个字符出现的次数

*表示字符前面出现任意次或者0次? *表示前面出现的相同字符是不确定的

clip_image006[18]

clip_image042

grep正则表达式前面的字母出现任意次

.* 代表任意长度的任意字符串, .代表一个字符,* 表示字符前面出现任意次或者0次

clip_image006[19]

clip_image044

grep正则表达式点星

\ ? 匹配字符前面出现一次或者0次

clip_image006[20]

clip_image046

grep正则表达式问号星前面的字符出现一次或者0次

\ + 匹配字符前面出现一次或者一次以上

clip_image006[21]

clip_image048

grep 正则表达式加号出现一次或者一次以上 - 副本

\ {数字 \ } 精确单词匹配多少次,前面的o必须出现22次

clip_image006[22]

clip_image050

正则表达式精确匹配数字

\ {数字,\ } 大于多少次 ,前面的o必须出现10次以上

clip_image006[23]

clip_image052

grep正则表达式必须大于数字多少

\ [数字 , 数字 \ } 前面取得数字必须出现的次数大于多少并小于多少次:

clip_image006[24]

clip_image054

grep正则表达式数字大于多少小于多少

多个位置锚定

^ 表示行首 锚定 ^ root root开头的行

clip_image006[25]

clip_image056

位置锚定root开头的行

$ 表示行尾 的行

clip_image006[26]

clip_image058

grep位置锚定表示结尾的行

​ “\ < root” root位于一行的行左 以root词开头的行

clip_image006[27]

clip_image060

grep位置锚定词开头的行

​ “\ > root” root位于一行的行左右 词尾

clip_image006[28]

clip_image062

grep位置锚定以词结尾的行

“\ b目标 \b” 表示单词的边界

clip_image006[29]

clip_image064

grep位置锚定b表示单词的边界

分组 表示的是一个单词出现几次

\ (wang\ ) 表示分组 , \ {3\ } 表示wang出现3次

clip_image006[30]

clip_image066

grep分组wang出现3次

后向引用 \1 必须和前面的目标一样

clip_image006[31]

clip_image068

grep分组后向引用

clip_image070

grep分组例题

clip_image072

grep分组例题2