1.了解grep命令常用操作

命令格式

grep [options] pattern [files]
  • pattern:要查找的字符串或正则表达式。
  • files:要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据

常用选项

  • -i:忽略大小写进行匹配。
  • -n:显示匹配行的行号。
  • –color:标红。
  • -v:反向查找,只打印不匹配的行。
  • -o:只显示匹配的部分
  • -c:显示匹配的数据中有多少行

常用操作

#从从标准输入中读取数据
mhzzj@mhzzj-virtual-machine:/usr/local/nginx/conf$ ls
fastcgi.conf          fastcgi_params          koi-utf  mime.types          nginx.conf          scgi_params          uwsgi_params          win-utf
fastcgi.conf.default  fastcgi_params.default  koi-win  mime.types.default  nginx.conf.default  scgi_params.default  uwsgi_params.default
mhzzj@mhzzj-virtual-machine:/usr/local/nginx/conf$ ls | grep .conf
fastcgi.conf
fastcgi.conf.default
nginx.conf
nginx.conf.default

#从文件指定的部分文件中读取数据
mhzzj@mhzzj-virtual-machine:/usr/local/nginx/conf$ grep "port" nginx.*
nginx.conf:    # another virtual host using mix of IP-, name-, and port-based configuration
nginx.conf.default:    # another virtual host using mix of IP-, name-, and port-based configuration

2.正则表达式基础

字符匹配

  • \\ :匹配转义字符\
  • \t:匹配转义字符\t
  • \n:匹配转义字符\n
  • [...] :匹配括号内任意一字符,如[ab]表示匹配a或b
mhzzj@mhzzj-virtual-machine:~$ echo "abcd mn bbb xcm/"| grep -o [ax//]
a
x
/
  • [^ ...] :匹配括号内任意一字符, 如[ab]表示匹配不是a或b的任一字符
  • [ x-y ]:匹配x~y的任意一字符,如[0-9]表示全部数字的任意一个
  • .: 匹配任意的一位字符
  • \d :匹配任意的一位数字,等价于.[0-9]
  • \D :匹配任意的一位非数字,等价于 .[^0-9]
  • \w:匹配任意的一位数字或大小写字母、等价于 .[a-zA-Z0-9]
  • \W :匹配任意的一位非数字、字母、_、等价于 .[^a-zA-Z0-9 _]
  • \s :匹配任意的一位空格例,如:\n\t等。
  • \S :匹配任意的一位非空格

选择匹配

  • |:选择匹配,如ab|cd匹配字符串ab或者cd
mhzzj@mhzzj-virtual-machine:~$ echo "abcd mn bbb xcm/"| grep -o "ab\|mn"
ab
mn

限定符

用于指定前面的字符出现多少次

  • :出现0次或1次
  • \:将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。
  • *:出现0次或1次或多次
  • +:出现1次或多次
  • {n}:出现n次
  • {n,}:出现n次以上
  • {n,m}:出现n-m次
mhzzj@mhzzj-virtual-machine:~$ echo "aaaa mn aaa xcm/"| grep -o "a\{2,4\}" 
aaaa
aaa

边界匹配

  • ^:表示一组正则的开始
  • $:表示一组正则的结束
#匹配redis.conf 9结尾的行
mhzzj@mhzzj-virtual-machine:~/env/redis$ grep "9$" redis.conf --color
port 6379
# tls-port 6379
#   user worker +@list +@connection ~jobs:* on >ffa9203c493aa99
# cluster-announce-tls-port 6379
  • \b:匹配一个单词边界,即字与空格间的位置。
  • \B:非单词边界匹配。

3.应用

获取Linux的IP地址

mhzzj@mhzzj-virtual-machine:~/env/redis$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.155  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::1c2e:c3a0:7596:f375  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:24:13:02  txqueuelen 1000  (以太网)
        RX packets 3571  bytes 507660 (507.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 190  bytes 27130 (27.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

mhzzj@mhzzj-virtual-machine:~/env/redis$ ifconfig ens33 | grep -o "inet [0-9.]\+"|cut -d" " -f2
192.168.10.155

查看redis默认配置

mhzzj@mhzzj-virtual-machine:~/env/redis$ grep -v "^#" redis.conf| grep -v  "^\s*$"
bind 127.0.0.1 -::1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300

PS:该博文随着工作的积累会不断更新