Linux-Shell-Grep

1、grep -c "A$" /etc/passwd  #打印以A结尾的行的行数

 2、 grep -i "A"  #忽略大小写

3、grep -v "A"  #排除某字符,反向查找

4、grep -w "A" #以单词为字符筛选

5、grep  -wv -e nologin -e bash /etc/passwd  #-e排除多个条件

6、grep  -wv “nologin\|bash" /etc/passwd  #排除多个条件

7、grep -E  -wv “nologin|bash" /etc/passwd  #排除多个条件

8、grep -Ev '(^#|^$)'  #去除以#和空格开头的行

9、grep -Rw --exclude-dir =pki keys /etc #在/etc目录下的所有文件中搜索单词keys,不包括/etc/pki

10、grep -r --exclude-dir={proc,boot,sys}  gnu /   #排除多个目录,将排除的目录放在大括号中,并使用逗号分开

在系统中查找包含字符串gnu的文件,不包括proc,boot,和sys目录

11、grep -rl  --exclude=*.{png,jpg}  linuxprobe *  #当前工作目录中搜索字符串Linuxprobe,不包括以.png和.jpg结尾的文件

12、 grep -n  #显示行号

[root@k8s-master ~]# grep -n 't[ae]st' stu_1.sh   其实 [] 里面不论有几个字节,代表某『一个』字节, 需要的字串是『tast』或『test』

[root@k8s-master ~]# grep -n '[^g]oo' stu_1.sh   字符类的反向选择 [^] :如果想要搜索到有 oo 的行,但不想要 oo 前面有 g

^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义

任意一个字节 . 与重复字节 *
这两个符号在正则表达式的意义如下:

. (小数点):代表『一定有一个任意字节』的意思;
* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态

[root@k8s-master ~]# grep -n 'ooo*' stu_1.sh  因此,『o*』代表的是:『拥有空字节或一个 o 以上的字节』

[root@k8s-master ~]# grep -n 'g.*g' stu_1.sh  g 开头与 g 结尾的行,当中的字符可有可无

[root@k8s-master ~]# grep -n 'goo*g' stu_1.sh  字串开头与结尾都是 g,但是两个 g 之间仅能存在至少一个 o ,亦即是 gog, goog, gooog

[root@k8s-master ~]# grep -n 'go\{2,5\}g'  g 后面接 2 到 5 个 o ,然后再接一个 g 的字串

[root@k8s-master ~]# grep -n 'go\{2,\}g'   2 个 o 以上的 goooo....g 

扩展grep(grep -E 或者 egrep):
使用扩展grep的主要好处是增加了额外的正则表达式元字符集。

[root@k8s-master ~]#  egrep 'NW|EA' stu_1.sh  

[root@k8s-master ~]#  grep 'NW\|EA' stu_1.sh  ==grep -E 

对于标准grep,如果在扩展元字符前面加\,grep会自动启用扩展选项-E。

[root@k8s-master ~]# egrep '3+' stu_1.sh 

[root@k8s-master ~]# grep -E  '3+' stu_1.sh 

[root@k8s-master ~]# grep '3\+' stu_1.sh 

[root@k8s-master ~]# egrep '2\.?[0-9]'    首先含有2字符,其后紧跟着0个或1个点,后面再是0和9之间的数字

[root@k8s-master ~]# egrep '(no)+'   ===

[root@k8s-master ~]# grep '\(no\)\+' 与上面等价

posted @ 2021-09-15 15:16  闲云野鹤cs  阅读(231)  评论(0编辑  收藏  举报