grep工具的使用
- grep工具
- grep命令练习
- 1.写入一个文件,匹配1-255的数字:
- 2.分组:
- 3.找出/etc/passwd文件中一位数和两位数:
- 4.在网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens16777736 中检索出所有的 IP:
- 5.使用egrep取出路径的目录名:
- 6.显示ifconfig命令结果中所有IPv4地址:
- 7.显示所有包含一个大写字母,后跟四个小写字母,一个空格,和一个大写字母的行:
- 8.显示工资为六位数的行,并在前面加行号:
- 9.显示包括Lincoln或lincoln的行,并且grep对字母大小不受影响:
- 10.显示/etc/init.d/functions中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行:
- 11.过滤字符出现的次数
- 12.过滤所有空行和以#开头的行:
- 13.匹配字符串数:
- 14.过滤test文件中的大写开头和空行,并显示行数:
- 15.显示以数字和#开头,并显示行数:
- 16.在11111的上下5行内过滤数字开头,并显示行数:
- 17.匹配所有字母开头:
- 18.过滤oo:
- 19.过滤字符串oo或11,并过滤掉开头是p和m的字符串:
- 20.过滤一个oo或多个oo,并显示分组s...l.*n..o:
grep工具
grep是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix 的 grep 家族包括 grep 、egrep 、 fgrep 。egrep 表示扩展的 grep ,相比 grep 支持更多的元字符。
grep -E 相当于 egrep 。
fgrep 是 fast grep ,不支持元字符,但是搜索速度更快。grep 过滤的结果被送到屏幕,不影响原文件内容。
grep不加引号直接过滤字符串 ;grep在进行模式匹配的时候必须加引号,单引号和双引号都可以 ;grep在引用变量的时候必须加双引号
参数:
-r : 递归搜索
-b : 显示输出行的从文件开始起的字节偏移量。
-c : 符合条件的行数
-q : 不显示任何信息。
-v : 反向选取
-l : 列出文件内容符合指定的范本样式的文件名称。
-o : 只显示被模式匹配到的字符串,而不是整个行
-i : 匹配时不区分大小写
-A5 : 显示匹配到的行时,显示后面的 5 行
-B5 : 显示匹配到的行时,前面的 5 行
-C5 : 显示匹配到的行时,前后的 5 行
-E : 使用扩展的正则表达式(egrep)
[:digit:] : 所有数字,相当于 0-9 或者 \d
[:lower:] :所有的小写字母
[:upper:]:所有的大写字母
[:alpha:] :所有的字母
[:alnum:] :相当于[0-9a-zA-Z]
[:space:] :空白字符,相当于 \s
[:punct:] :所有标点符号
.*:匹配任意长度的任意字符
?:匹配其前面的字符0次或1次;"a?b"指的就是a后面到b中间可以有一个字符或者什么都没有
{m}:匹配m次
{m,n}:至少m次,最多n次
{m,}:至少m次;多的话贪婪匹配(贪婪模式匹配:尽可能的去匹配。永无止境)
{0,n}:至多n次
^$:锚定空白行
<或\b锚定词首
>或\b锚定词尾
():指的就是括号里面的字符属于一个组,在一块的就匹配显示出来
grep命令练习
1.写入一个文件,匹配1-255的数字:
# cat > num.txt << EOF
> 115
> 11
> 255
> 256
> 335
> EOF
# egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" num.txt
2.分组:
# cat test.txt << EOF
> He like his liker
> He love his lover
> She love her lover
> She like her lover
> EOF
# grep "l..e.*l..er" tes.txt
# grep "\(l..e\).*\lr" test.txt
3.找出/etc/passwd文件中一位数和两位数:
# grep "\<[0-9]\{1,2\}>" /etc/passwd
4.在网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens16777736 中检索出所有的 IP:
# egrep "\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\
> ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b" \
> /etc/sysconfig/network-scripts/ifcfg-ens16777736
5.使用egrep取出路径的目录名:
echo "/etc/rc.d/init.d/functions/" |egrep -o "/.*[^/]" |egrep -o "/.*/"
6.显示ifconfig命令结果中所有IPv4地址:
ifconfig |egrep -o "\<(([0-9|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\
> ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-9]|25[0-5])\>"
7.显示所有包含一个大写字母,后跟四个小写字母,一个空格,和一个大写字母的行:
# cat datafile |grep [A-Z][a-z][a-z][a-z][a-z]' '[A-Z]
8.显示工资为六位数的行,并在前面加行号:
# grep -n '[0-9]\{6\}$' datafile
9.显示包括Lincoln或lincoln的行,并且grep对字母大小不受影响:
# grep -i '[L|l]incoln' datafile
10.显示/etc/init.d/functions中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行:
# grep '^#[[:space:]]\{1,\}[^[:space:]]' /etc/init.d/functions
11.过滤字符出现的次数
# grep 'o\{2\}' test.txt
12.过滤所有空行和以#开头的行:
# grep -v '^#' test.txt |grep -v '^$'
13.匹配字符串数:
# grep -c "root" test.txt
14.过滤test文件中的大写开头和空行,并显示行数:
# grep -v '^[A-Z]' test.txt |grep -v '^&' -n
15.显示以数字和#开头,并显示行数:
# grep -v '^[a-zA-Z]' test.txt |grep -n -v '^$'
16.在11111的上下5行内过滤数字开头,并显示行数:
# egrep -C5 '11111' test.txt |grep -v -n '^[0-9]'
17.匹配所有字母开头:
# grep -i '^[a-z]' test.txt
18.过滤oo:
# egrep 'o++' test.txt
19.过滤字符串oo或11,并过滤掉开头是p和m的字符串:
egrep 'oo|ll' test.txt |grep -v '^[p,m]'
20.过滤一个oo或多个oo,并显示分组s…l.*n…o:
# egrep '(oo)+' test.txt |grep 's...l.*n..o'