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\)\+' 与上面等价