此链接通往 Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:
练习:
方法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
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
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
root@zhengzelin:~# grep -E "\b[0-9]{2,3}\b" /etc/passwd
[root@www ~]# grep "^ " /etc/grub2.cfg | grep -v "^$"
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
[root@www ~]# netstat -tan | grep LISTEN' '
[root@www ~]# netstat -tan | grep LISTEN'[[:space:]] '
[root@www ~]# echo "/etc/ssh/moduli" | grep -Eo "[^/]+$"
moduli
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) 可以省掉 \ 。
将分组的结果匹配三次的时候,发现只匹配了三个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:
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 : [0-9]
10-99 : [1-9][0-9]
# 0-9 和 10-99 正则表达式写法可以表达为一个: [1-9]?[0-9]
100-199:1[0-9]\{2\}
200-249:2[0-4][0-9]
250-255:25[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:
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
# 直接加一个 _ 即可!