1.了解grep命令常用操作
命令格式
grep [options] pattern [files]
- pattern:要查找的字符串或正则表达式。
- files:要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。
常用选项
- -i:忽略大小写进行匹配。
- -n:显示匹配行的行号。
- –color:标红。
- -v:反向查找,只打印不匹配的行。
- -o:只显示匹配的部分
常用操作
#从从标准输入中读取数据mhzzj@mhzzj-virtual-machine:/usr/local/nginx/conf$ lsfastcgi.conffastcgi_paramskoi-utfmime.typesnginx.confscgi_paramsuwsgi_paramswin-utffastcgi.conf.defaultfastcgi_params.defaultkoi-winmime.types.defaultnginx.conf.defaultscgi_params.defaultuwsgi_params.defaultmhzzj@mhzzj-virtual-machine:/usr/local/nginx/conf$ ls | grep .conffastcgi.conffastcgi.conf.defaultnginx.confnginx.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 configurationnginx.conf.default:# another virtual host using mix of IP-, name-, and port-based configuration
2.正则表达式基础
字符匹配
\\
:匹配转义字符\
\t
:匹配转义字符\t
\n
:匹配转义字符\n
[...]
:匹配括号内任意一字符,如[ab]
表示匹配a或bmhzzj@mhzzj-virtual-machine:~$ echo "abcd mn bbb xcm/"| grep -o [ax//]ax/
[^ ...]
:匹配除括号内任意一字符, 如[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或者cdmhzzj@mhzzj-virtual-machine:~$ echo "abcd mn bbb xcm/"| grep -o "ab\|mn"abmn
限定符
用于指定前面的字符出现多少次
?
:出现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\}" aaaaaaa
边界匹配
^
:表示一组正则的开始$
:表示一组正则的结束#匹配redis.conf 9结尾的行mhzzj@mhzzj-virtual-machine:~/env/redis$ grep "9$" redis.conf --colorport 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 ens33ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500inet 192.168.10.155netmask 255.255.255.0broadcast 192.168.10.255inet6 fe80::1c2e:c3a0:7596:f375prefixlen 64scopeid 0x20<link>ether 00:0c:29:24:13:02txqueuelen 1000(以太网)RX packets 3571bytes 507660 (507.6 KB)RX errors 0dropped 0overruns 0frame 0TX packets 190bytes 27130 (27.1 KB)TX errors 0dropped 0 overruns 0carrier 0collisions 0mhzzj@mhzzj-virtual-machine:~/env/redis$ ifconfig ens33 | grep -o "inet [0-9.]\+"|cut -d" " -f2192.168.10.155
查看redis默认配置
mhzzj@mhzzj-virtual-machine:~/env/redis$ grep -v "^#" redis.conf| grep -v"^\s*$"bind 127.0.0.1 -::1protected-mode yesport 6379tcp-backlog 511timeout 0tcp-keepalive 300