Linux正則表達式及grep練習題
1、找出ifconfig命令結果中本機的所有IPv4地址
# ifconfig|grep -E -o "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
2、查出分區空間使用率的最大百分比值
# df |grep "/dev/[sh]d"|tr -s ' ' '%'|cut -d"%" -f5|sort -nr|head -1
3、查出用戶UID最大值的用戶名、 UID及shell類型
# sort -t: -k3 -nr /etc/passwd|head -1|cut -d: -f1,3,7
4、查出/tmp的權限,以數字方式顯示
# stat /tmp |grep '('|cut -d"(" -f2|cut -d"/" -f1
5、統計當前連接本機的每個遠程主機IP的連接數,并按從大到小排序
# netstat -tn|grep "tcp"|tr -s ' '|cut -d" " -f5|cut -d: -f1|sort -t"." -k4|uniq -c|sort -nr
6、顯示/proc/meminfo文件中以大小s開頭的行; (要求:使用兩種方式)
# grep -i "^s" /proc/meminfo
# grep "^[Ss]" /proc/meminfo
7、顯示/etc/passwd文件中不以/bin/bash結尾的行
# grep -v "/bin/bash$" /etc/passwd
8、顯示用戶rpc默認的shell程序
# grep "^rpc:" /etc/passwd|cut -d: -f7
9、找出/etc/passwd中的兩位或三位數
# grep -o "\<[1-9][0-9]\{1,2\}\>" /etc/passwd|sort -nr|uniq
10、顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的且后面存非空白字符的行
# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
11、 找出“netstat -tan”命令的結果中以‘LISTEN’后跟任意多個空白字符結尾的行
# netstat -tan|grep "LISTEN[[:space:]]*$"
12、添加用戶bash、 testbash、 basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用戶名同shell名
的行
# grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
13、 顯示三個用戶root、 mage、 wang的UID和默認shell
# egrep "^((root)|(mage)|(wang)\>)" /etc/passwd
14、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
# egrep "^[[:alpha:]_]+\(\)" /etc/rc.d/init.d/functions
15、使用egrep取出/etc/rc.d/init.d/functions中其基名
# echo "/etc/rc.d/init.d/functions" |grep -o "[^/]\+/\?$"
16、使用egrep取出上面路徑的目錄名
# echo "/etc/rc.d/init.d/functions" |egrep -o "^/.*/"
17、統計以root身份登錄的每個遠程主機IP地址的登錄次數
# last|egrep "^root.*(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).*"|tr -s " "|cut -d" " -f3|uniq -c
18、利用擴展正則表達式分別表示0-9、 10-99、 100-199、200-249、 250-255
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]
19、取本機IP地址
# ifconfig|grep "Bcast"|cut -d":" -f2|cut -d" " -f1
20、取各分區利用率的數值
# df |grep "/dev/[sh]d"|tr -s ' ' '%'|cut -d% -f5|sort -nr
21、統計/etc/init.d/functions 文件中每個單詞出現的次數,并按頻率從高到低顯示
# cat /etc/init.d/functions |tr -c "[:alpha:] \n" " "|tr -s " " "\n"|sort|uniq -c|sort -nr
22、/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/" 取目錄名
# echo "/etc/rc.d/init.d/functions"|sed 's@[^/]\+/\?$@@'
23、正則表達式表示身份證號
1: [1-9]
2-6: [0-9]{5}
78: (19|20|21)
9-10 [0-9]{2}
11-12 ((0[1-9])|11|12)
13-14 ((0[1-9])|([12][0-9])|(3[0-1]))
15-17 [0-9]{3}
18 [0-9X]
# egrep "\<[1-9][0-9]{5}(19|20|21)[0-9]{2}((0[1-9])|(10|11|12))((0[1-9])|([12][0-9])|(3[0-1]))[0-9]{3}[0-9Xx]\>"
24、正則表達式表示手機號
分析:
第一位 1
第二位 3、4、5、7、8
egrep "\<1[34578][0-9]{9}\>"
25、正則表達式表示郵箱
egrep -o "\<[[:alnum:]_\-]+\.?[[:alnum:]]+@([[:alnum:]_\-]+\.)+(com|cn|edu|org|net|gov)\.?\>"
26、正則表達式表示QQ號
# egrep "\<[1-9][0-9]{4,11}\>"
原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/29752