复习
linux中grep家族总共有三个:grep,egrep,fgrep。
常用选项:
-E :开启扩展(Extend)的正则表达式。
-i :忽略大小写(ignore case)
[root@centos8 ~]# grep -i "Ip" /etc/sysconfig/network-scripts/ifcfg-enp0s3
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
IPADDR=192.168.43.150
-v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。
[root@centos8 ~]# grep -v "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=enp0s3
UUID=2ef994b5-508e-4818-8271-5aece710e376
DEVICE=enp0s3
ONBOOT=yes
PREFIX=24
GATEWAY=192.168.43.1
-n :显示行号
[root@centos8 ~]# grep -n "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
6:IPV4_FAILURE_FATAL=no
7:IPV6INIT=yes
8:IPV6_AUTOCONF=yes
9:IPV6_DEFROUTE=yes
10:IPV6_FAILURE_FATAL=no
11:IPV6_ADDR_GEN_MODE=stable-privacy
16:IPADDR=192.168.43.150
-w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有BOOTPROTO,而我搜寻的只是BOOT,就可以使用-w选项来避免匹配BOOTPROTO
[root@centos8 ~]# grep -w "BOOT" /etc/sysconfig/network-scripts/ifcfg-enp0s3
-c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
[root@centos8 ~]# grep -v "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=enp0s3
UUID=2ef994b5-508e-4818-8271-5aece710e376
DEVICE=enp0s3
ONBOOT=yes
PREFIX=24
GATEWAY=192.168.43.1
[root@centos8 ~]# grep -c "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
7
[root@centos8 ~]# grep -cv "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
11
-o :只显示被模式匹配到的字符串。
[root@centos8 ~]# grep -o "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
IP
IP
IP
IP
IP
IP
IP
–color :将匹配到的内容以颜色高亮显示。
-A n:显示匹配到的字符串所在的行及其后n行,after
[root@centos8 ~]# grep -A 2 "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=2ef994b5-508e-4818-8271-5aece710e376
--
IPADDR=192.168.43.150
PREFIX=24
GATEWAY=192.168.43.1
-B n:显示匹配到的字符串所在的行及其前n行,before
[root@centos8 ~]# grep -B 2 "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
--
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.43.150
-C n:显示匹配到的字符串所在的行及其前后各n行,context
[root@centos8 ~]# grep -C 2 "IP" /etc/sysconfig/network-scripts/ifcfg-enp0s3
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=2ef994b5-508e-4818-8271-5aece710e376
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.43.150
PREFIX=24
GATEWAY=192.168.43.1
位置锚定
^:行首
KaTeX parse error: Undefined control sequence: \< at position 74: … \̲<̲, \b:词首 …"用于匹配空白行
2.egrep
egrep命令用于在文件内查找指定的字符串。egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。
用法:
[root@centos8 ~]# cd /etc/
[root@centos8 etc]# egrep "Linux" redhat-release os-release services
redhat-release:CentOS Linux release 8.1.1911 (Core)
os-release:NAME="CentOS Linux"
os-release:PRETTY_NAME="CentOS Linux 8 (Core)"
services:nbd 10809/tcp # Linux Network Block Device
找出/etc/fstab文件中一位数或两位数
egrep --color ‘<[0-9]{1,2}>’ /etc/fstab
3.fgrep
相当于执行 grep 指令加上参数 -F,详见grep命令说明。
Linux fgrep命令用于查找文件里符合条件的字符串。
语法
fgrep [范本样式][文件或目录…]
fgrep --color “defaults” /etc/fstab