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或bmhzzj@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或者cdmhzzj@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:该博文随着工作的积累会不断更新

本文介绍了grep命令的常用操作,包括从标准输入和文件中查找特定字符串,以及正则表达式的基础知识,如字符匹配、选择匹配和限定符。通过示例展示了如何使用grep查找Linux的IP地址和查看Redis配置。
1385

被折叠的 条评论
为什么被折叠?



