常见的正则表达式使用例子:


        此链接通往 Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:


 

练习:

1、显示 /proc/meminfo 文件中以 大小s 开头的行:

方法1:
root@zhengzelin:~# grep -E "^(S|s)" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB


方法2:
root@zhengzelin:~# grep -i "^s" /proc/meminfo 
SwapCached:            0 kB
SwapTotal:             0 kB
SwapFree:              0 kB

 

2、显示 /etc/passwd 中不以 /bin/bash 结尾的行

root@zhengzelin:~# grep -v "/bin/bash$" /etc/passwd
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

root@zhengzelin:~# grep -v "/bin/bash\b" /etc/passwd
root@zhengzelin:~# grep -v "/bin/bash\>" /etc/passwd

 

3、显示用户 ntp 默认的shell程序

root@zhengzelin:~# cat /etc/passwd | grep ^ntp | awk -F':' '{print $7}'
/bin/false
root@zhengzelin:~# cat /etc/passwd | grep ^ntp | awk -F':' '{print $NF}'
/bin/false

 

4、显示出 /etc/passwd 中的十位数或百位数:

root@zhengzelin:~# grep -E "\b[0-9]{2,3}\b" /etc/passwd

 

5、显示某文件中 以空格开头却不是空行的行:

[root@www ~]# grep "^ " /etc/grub2.cfg | grep -v "^$"
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb

 

6、“netstat -tan” 命令的结果中以 LISTEN后跟任意空白字符结尾的行

[root@www ~]# netstat -tan | grep LISTEN' '

[root@www ~]# netstat -tan | grep LISTEN'[[:space:]] '
扫描二维码关注公众号,回复: 10687407 查看本文章

 

7、过滤出 “/etc/ssh/moduli” 中的 moduli

[root@www ~]# echo "/etc/ssh/moduli"  | grep -Eo "[^/]+$"
moduli

8、常见的过滤ip:

方法1:

root@zhengzelin:~# ifconfig | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
172.24.25.40
172.24.63.255
255.255.192.0
127.0.0.1
255.0.0.0:

{1,3} 正常是这样的:\{1,3\},不过使用 grep -E(或 egrep) 可以省掉 \ 。

方法2:使用分组 \(\)

在这里插入图片描述
将分组的结果匹配三次的时候,发现只匹配了三个ip段,但是你如果换成 匹配四次的话,发现没有匹配结果

所以只能在 \([0-9]\{1,3\}\.\) 后面 再加一个关于ip字段的正则表达式了:[0-9]\{1,3\}

root@zhengzelin:~# ifconfig | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
192.168.xxx.xxx
255.255.192.0
127.0.0.1
255.0.0.0

过滤ip时需特别注意:

举个栗子:

假如给你一个文件,里面的ip地址格式不符合规范,需要你过滤出符合规范的ip:

root@zhengzelin:~# cat test
1392.168.1.1            
192.168.1.2333     #这不是两个不符合规则的ip吗?
192.168.1.3


继续使用上面的命令,你会发现,输出的结果他自动将行首和行尾的数字给删除了!

root@zhengzelin:~# grep -o "\([0-9]\{1,3\}\.\)\{3,\}[0-9]\{1,3\}" test
392.168.1.1        
192.168.1.233          
192.168.1.3

************************************************************************************************************************
其实严谨的格式应该加上 \< \>   或 \b \b  格式才行:

root@zhengzelin:~# grep -o "\<\([0-9]\{1,3\}\.\)\{3,\}[0-9]\{1,3\}\b" test
192.168.1.3                 # 当然 \< 和 \b 可以混合使用,只有这个ip才符合!

root@zhengzelin:~# grep -o "\<\([0-9]\{1,3\}\.\)\{3,\}[0-9]\{1,3\}\>" test
root@zhengzelin:~# grep -o "\b\([0-9]\{1,3\}\.\)\{3,\}[0-9]\{1,3\}\b" test

使用正则表达式表示(0-9、10-99、100-199…)

0-9   :  [0-9]
10-99 :  [1-9][0-9]  
# 0-910-99 正则表达式写法可以表达为一个: [1-9]?[0-9]

100-1991[0-9]\{2\}
200-2492[0-4][0-9]
250-25525[0-5]
25[0-5]

基础正则表达式表示 0-255: ([1-9]?[0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5])
扩展正则表达式表示 0-255([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

# 因为是一个整体,所以使用 () 给括起来

******************************************************************************************************************************
来过滤ip:


 

9、过滤邮箱地址:

root@zhengzelin:~# cat test
123456@qq.com
abc123@163.com
bcz345@139.com
zanv1233@189.cn

root@zhengzelin:~# grep -E "[0-9a-zA-Z]+\@[0-9a-zA-Z]+\.[0-9a-zA-Z]{1,3}" test

千万注意: 中间的连接符符号必须为 +,来连接 \@ 和 “\.” 。
在这里插入图片描述
注意:如果邮箱地址里有 “_” 符号:

root@zhengzelin:~# grep -E "[0-9a-zA-Z_]+\@[0-9a-zA-Z]+\.[0-9a-zA-Z]{1,3}" test

# 直接加一个 _ 即可!
发布了99 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ljlfather/article/details/105089764