码迷,mamicode.com
首页 > 其他好文 > 详细

grep/egrep工具的使用

时间:2020-08-21 16:45:23      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:匹配   大小写   大于等于   行号   ash   grep -v   格式   工具   pass   

grep/egrep 工具的使用

格式:grep [-cinvABC] ‘word‘ filename

  • -c:表示打印符合要求的行数

    grep -c ‘root‘ passwd 统计passwd 里面包含root的行数

  • -i:表示忽略大小写。

    grep -i ‘root‘ passwd 把passwd文件中包含root(字母不区分大小写) 打印到输出界面

  • -n:表示输出符合要求的行及其行号

    grep -n ‘root‘ passwd 把passwd文件中包含root的行打印出来,且显示第几行

  • -v:表示打印不符合要求的行。

    grep -v ‘root‘ passwd 把passwd文件中不包含root 的行打印出来

  • -r:遍历所有子目录

    grep -r ‘root‘ /etc/ 查找/etc目录下所有子目录子文件中包含root的行

  • -A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行

    grep -A2 ‘root‘ passwd 打印出包含root的行和下面两行

  • -B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行

    grep -B2 ‘root‘ passwd 打印出包含root的行和上面两行

  • -C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行。

    grep -C2 ‘root‘ passwd 打印出包含root的行和上面两行,下面两行,总共五行


grep的实用

1,过滤出带有某个关键词的行,并输出行号

[root@jinkai01 grep]# grep -n ‘root‘ passwd
打印出包含 root 的行

2,过滤出不带有某个关键词的行,并输出行号

[root@jinkai01 grep]# grep -nv ‘root‘ passwd
打印出不包含 root 的行

3,过滤出所有包含数字的行(只要有一个数字匹配到就算

[root@jinkai01 grep]# grep ‘[0-9]‘ passwd
将passwd 中包含 数字0-9的行打印出来

4,过滤出所有不包含数字的行

[root@jinkai01 grep]# grep -v [0-9] inittab
将passwd 中不包含数字 0-9的行打印出来

5,过滤掉所有以#开头的行 (这里面包含了空行)

[root@jinkai01 grep]# grep -v ‘^#‘ inittab
将inittab 文件中不是以 #号开头的行打印出来,空行也算

6,过滤掉所有空行和以#开头的行

[root@jinkai01 grep]# grep -v ‘^#‘ inittab | grep -v ‘^$‘
将inittab文件中不是以#号开头的行且非空行打印出来
在正则表达式中,^表示行的开始,$表示行的结尾,那么空行则可以用^$表示。

7,打印出不以英文字母开头的行

[root@jinkai01 grep]# grep ‘^[^a-zA-Z]‘ a.txt 打印出以非字母开头的行
123
456
#fdasffd
[root@jinkai01 grep]# grep ‘[^a-zA-Z]‘ a.txt 打印出包含非字母的行
123
456
abc134
#fdasffd
A123

8,过滤出任意一个字符和重复字符

[root@jinkai01 grep]# grep ‘r.o‘ passwd
. 表示任意一个字符,r.o表示r 和 o 之间有任意一个字符的,例如 包含roo的就可以打印出来
root:x:0:0:root:/root:/bin/bash
[root@jinkai01 grep]# grep ‘oo*‘ passwd

  • 表示零个或多个前面的字符,oo 表示一个o为基础o可以是零个或者多个,所以o oo ooo。。。都包含在内
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    *表示零个或多个任意字符,空行也包含在内

9,指定要过滤出的字符出现次数

grep ‘o{2}‘ passwd 筛选出o重复出现两次
这里用到了符号{},其内部为数字,表示前面的字符要重复的次数。需要强调的是,{}左右都需要加上转义字符\。另外,使用“{ }”还可以表示一个范围,具体格式为{n1,n2},其中n1 < n2,表示重复n1到n2次前面的字符,n2还可以为空,这时表示大于等于n1次

10,过滤出一个或多个指定的字符

egrep ‘o+‘ passwd 筛选出包含o 的一个或多个字符
和grep不同,这里egrep使用的是符号+,它表示匹配1个或多个+前面的字符,这个“+”是不支持 被grep直接使用的。包括上面的{},也是可以直接被egrep使用,而不用加\转义。示例如下
egrep o{2} passwd = grep ‘o{2}‘ passwd

11,过滤出零个或一个指定的字符

egrep ‘o?‘ passwd
?代表o到1个任意字符

12,过滤出字符串 1 或者字符串 2

egrep ‘aa|11|oo‘ passwd
将passwd 中包含aa或11或oo的行打印出来

13,egrep 中 () 的应用

egrep ‘r(oo|at)o‘ passwd 筛选出 rooo或rato 字符
这里用()表示一个整体,上例中会把包含rooo或者rato的行过滤出来,另外也可以把()和其他符号组合在一起,例如(oo)+就表示1个或者多个oo。如下所示:
egrep ‘(oo)+‘ passwd

grep/egrep工具的使用

标签:匹配   大小写   大于等于   行号   ash   grep -v   格式   工具   pass   

原文地址:https://blog.51cto.com/11451960/2521527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!