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包含root的行 - 副本
“grep -v 目标 文件” 显示不包含目标的其他内容。 下面表示非#号开头的行
grep -v非
“grep -i 目标 文件” 忽略目标的大小写
grep -i忽略大小写 - 副本
“grep -n 目标 文件” 目标文件在第几行
,并显示序列号
grep -n 看目标在什么行
“grep -c 目标 文件” 查看目标这个有几行
grep -c 看总共有几行 - 副本
“grep -o 目标 文件” 只显示相关的字符,一行的其他不显示
只显示这个字符,不显示其他
“grep -q 目标 文件” 不显示输出的内容,可以用 echo $?查看, 非0代表没有找到目标
grep -p 不显示结果 - 副本
“grep -A 目标 文件” A后面加个数字包含目标的后几行
grep -A 加数字显示后几行 - 副本
“grep -B 目标 文件” B后面加数字显示包含目标的前几行
grep -B 后面加个数字显示目标的前几行 - 副本
“grep -C 目标 文件” C前面加个数字显示包含目标的前后几行
grep -C 后面加数字显示目标的前后几行 - 副本
“grep -e 目标1 -e 目标2 文件” 包括目标1或者目标2 或者的关系,一行不显示两目标
grep -e 或者的关系 - 副本
“”grep -w 单词 文件“” 在文件里面是单词的目标
grep -w 是一单词为目标的 - 副本
字母数字加下划线都是字母的一部分,其他都不是字母的一部分
grep-w加特殊字符不是单词 - 副本
grep -f 后面是跟的文件,将目标放在几个文件里面 ,然后执行grep -f
grep -f 将目标写到一个文件
grep -f 执行的结果
正则表达式
处理文本内容 通过特定的符号来匹配或者控制
BRE 基本正则表达式
ERE 扩展正则表达式
元字符分类:字符匹配 ,匹配次数, 位置锚定, 分组
字符匹配
. 表示文件内容任意一个字符“a..d” abcd 两个..表示两个字符。a代表一个字符,.代表一个字符,c代表一个字符
正则表达式 字符。描述
[ . ] 点放在中括号 代表.点的本意
转义 \ . 代表. 点字符的本意,中间的点转义到原来.的意思
grep 正则表达式字符转义 - 副本
grep “r[abc]t” 取中括号里面的任意的一个字符
grep正则表达式中括号任意一个字符
grep “r[^abc]t” 除了中括号里面的任意字符
grep正则表达式除了中括号里面的任意一个字符
匹配次数 :某一个字符出现的次数
*表示字符前面出现任意次或者0次? *表示前面出现的相同字符是不确定的
grep正则表达式前面的字母出现任意次
.* 代表任意长度的任意字符串, .代表一个字符,* 表示字符前面出现任意次或者0次
grep正则表达式点星
\ ? 匹配字符前面出现一次或者0次
grep正则表达式问号星前面的字符出现一次或者0次
\ + 匹配字符前面出现一次或者一次以上
grep 正则表达式加号出现一次或者一次以上 - 副本
\ {数字 \ } 精确单词匹配多少次,前面的o必须出现22次
正则表达式精确匹配数字
\ {数字,\ } 大于多少次 ,前面的o必须出现10次以上
grep正则表达式必须大于数字多少
\ [数字 , 数字 \ } 前面取得数字必须出现的次数大于多少并小于多少次:
grep正则表达式数字大于多少小于多少
多个位置锚定
^ 表示行首 锚定 ^ root root开头的行
位置锚定root开头的行
$ 表示行尾 的行
grep位置锚定表示结尾的行
“\ < root” root位于一行的行左 以root词开头的行
grep位置锚定词开头的行
“\ > root” root位于一行的行左右 词尾
grep位置锚定以词结尾的行
“\ b目标 \b” 表示单词的边界
grep位置锚定b表示单词的边界
分组 表示的是一个单词出现几次
\ (wang\ ) 表示分组 , \ {3\ } 表示wang出现3次
grep分组wang出现3次
后向引用 \1 必须和前面的目标一样
grep分组后向引用
grep分组例题
grep分组例题2