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命令格式的示例

文件三剑客之一 grep 和正则表达式_Linux

grep包含root的行 - 副本

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

文件三剑客之一 grep 和正则表达式_系统/运维_02

grep -v非

文件三剑客之一 grep 和正则表达式_系统/运维_03

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

文件三剑客之一 grep 和正则表达式_系统/运维_04

文件三剑客之一 grep 和正则表达式_系统/运维_05

grep -i忽略大小写 - 副本

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

文件三剑客之一 grep 和正则表达式_Linux_06

,并显示序列号

文件三剑客之一 grep 和正则表达式_系统/运维_07

grep -n 看目标在什么行

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

文件三剑客之一 grep 和正则表达式_系统/运维_08

文件三剑客之一 grep 和正则表达式_Linux_09

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

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

文件三剑客之一 grep 和正则表达式_Linux_10

文件三剑客之一 grep 和正则表达式_Linux_11

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

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

文件三剑客之一 grep 和正则表达式_系统/运维_12

文件三剑客之一 grep 和正则表达式_Linux_13

grep -p 不显示结果 - 副本

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

文件三剑客之一 grep 和正则表达式_系统/运维_14

文件三剑客之一 grep 和正则表达式_系统/运维_15

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

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

文件三剑客之一 grep 和正则表达式_系统/运维_16

文件三剑客之一 grep 和正则表达式_Linux_17

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

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

文件三剑客之一 grep 和正则表达式_Linux_18

文件三剑客之一 grep 和正则表达式_系统/运维_19

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

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

文件三剑客之一 grep 和正则表达式_Linux_20

文件三剑客之一 grep 和正则表达式_系统/运维_21

grep -e 或者的关系 - 副本

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

文件三剑客之一 grep 和正则表达式_系统/运维_22

文件三剑客之一 grep 和正则表达式_Linux_23

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

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

文件三剑客之一 grep 和正则表达式_Linux_24

文件三剑客之一 grep 和正则表达式_Linux_25

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

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

文件三剑客之一 grep 和正则表达式_Linux_26

文件三剑客之一 grep 和正则表达式_系统/运维_27

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

文件三剑客之一 grep 和正则表达式_系统/运维_28

文件三剑客之一 grep 和正则表达式_系统/运维_29

grep -f 执行的结果

正则表达式

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

BRE 基本正则表达式

ERE 扩展正则表达式

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

字符匹配

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

文件三剑客之一 grep 和正则表达式_Linux_30

文件三剑客之一 grep 和正则表达式_Linux_31

正则表达式 字符。描述

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

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

文件三剑客之一 grep 和正则表达式_Linux_32

文件三剑客之一 grep 和正则表达式_系统/运维_33

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

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

文件三剑客之一 grep 和正则表达式_系统/运维_34

文件三剑客之一 grep 和正则表达式_Linux_35

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

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

文件三剑客之一 grep 和正则表达式_系统/运维_36

文件三剑客之一 grep 和正则表达式_Linux_37

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

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

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

文件三剑客之一 grep 和正则表达式_Linux_38

文件三剑客之一 grep 和正则表达式_Linux_39

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

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

文件三剑客之一 grep 和正则表达式_系统/运维_40

文件三剑客之一 grep 和正则表达式_系统/运维_41

grep正则表达式点星

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

文件三剑客之一 grep 和正则表达式_Linux_42

文件三剑客之一 grep 和正则表达式_Linux_43

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

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

文件三剑客之一 grep 和正则表达式_Linux_44

文件三剑客之一 grep 和正则表达式_系统/运维_45

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

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

文件三剑客之一 grep 和正则表达式_Linux_46

文件三剑客之一 grep 和正则表达式_Linux_47

正则表达式精确匹配数字

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

文件三剑客之一 grep 和正则表达式_系统/运维_48

文件三剑客之一 grep 和正则表达式_系统/运维_49

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

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

文件三剑客之一 grep 和正则表达式_Linux_50

文件三剑客之一 grep 和正则表达式_Linux_51

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

多个位置锚定

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

文件三剑客之一 grep 和正则表达式_Linux_52

文件三剑客之一 grep 和正则表达式_Linux_53

位置锚定root开头的行

$ 表示行尾 的行

文件三剑客之一 grep 和正则表达式_系统/运维_54

文件三剑客之一 grep 和正则表达式_系统/运维_55

grep位置锚定表示结尾的行

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

文件三剑客之一 grep 和正则表达式_Linux_56

文件三剑客之一 grep 和正则表达式_Linux_57

grep位置锚定词开头的行

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

文件三剑客之一 grep 和正则表达式_系统/运维_58

文件三剑客之一 grep 和正则表达式_系统/运维_59

grep位置锚定以词结尾的行

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

文件三剑客之一 grep 和正则表达式_系统/运维_60

文件三剑客之一 grep 和正则表达式_Linux_61

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

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

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

文件三剑客之一 grep 和正则表达式_系统/运维_62

文件三剑客之一 grep 和正则表达式_Linux_63

grep分组wang出现3次

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

文件三剑客之一 grep 和正则表达式_Linux_64

文件三剑客之一 grep 和正则表达式_Linux_65

grep分组后向引用

文件三剑客之一 grep 和正则表达式_系统/运维_66

grep分组例题

文件三剑客之一 grep 和正则表达式_Linux_67

grep分组例题2