三剑客练习题
1、找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写
# 第一种方式[root@localhost ~]# grep -Ei \'^s\' /proc/meminfoSwapCached: 0 kBSwapTotal: 0 kBSwapFree: 0 kBShmem: 5552 kBSlab: 33204 kBSReclaimable: 13648 kBSUnreclaim: 19556 kB# 第二种方式[root@localhost ~]# awk \'/^(s|S)/{print $0}\' /proc/meminfo[root@localhost ~]# awk \'/^s|^S/{print $0}\' /proc/meminfo[root@localhost ~]# awk \'/^[sS]/{print $0}\' /proc/meminfoSwapCached: 0 kBSwapTotal: 0 kBSwapFree: 0 kBShmem: 5584 kBSlab: 33536 kBSReclaimable: 13736 kBSUnreclaim: 19800 kB# 第三种方式[root@localhost ~]# sed -nr \'/^(s|^S)/p\' /proc/meminfoSwapCached: 0 kBSwapTotal: 0 kBSwapFree: 0 kBShmem: 5584 kBSlab: 33536 kBSReclaimable: 13736 kBSUnreclaim: 19800 kB
2、显示当前系统上的root,centos或者use开头的信息
[root@localhost ~]# grep -Er \'^(centos|root|user)\' /
3、找出/etc/init.d/function文件下包含小括号的行
[root@localhost etc]# grep -oE \'\\(|\\)\' /etc/init.d/functions
4、输出指定目录的基名
[root@localhost etc]# pwd | awk -F \'/\' \'{print $NF}\'
5、找出网卡信息中包含的数字
[root@localhost etc]# ip a | grep -oE \'[0-9]+\'
6、找出/etc/passwd下每种解析器的用户个数
[root@localhost ~]# awk -F\':\' \'{print $NF}\' /etc/passwd | sort | uniq -c |column -t2 /bin/bash1 /bin/sync1 /sbin/halt18 /sbin/nologin1 /sbin/shutdown
7、过去网卡中的ip,用三种方式实现
# 第一种[root@localhost ~]# ip a | grep -oE \'([0-9]{1,3}\\.+){3}[0-9]{1,3}\'127.0.0.1192.168.15.100192.168.15.255172.16.1.100172.16.15.255# 第二种# 第三种
8、搜索/目录下,所有的.html或.php文件中main函数出现的次数
# /etc目录下没有以.html或以.php结尾的文件# 我从根查的[root@localhost ~]# grep -Eo \'main\' `find / -type f -regex ".*\\.\\(html\\|php\\)"` | wc -l[root@localhost ~]# grep -oE \'main\' `find / -name \'*.html\' -o -name \'*.php\'` | wc -l
9、过滤掉php.ini中注释的行和空行
[root@localhost etc]# grep -vE \'^\\ *;|^$\' /etc/php.ini
10、找出文件中至少有一个空格的行
[root@localhost ~]# grep -E \'\\ +\' a.sh
11、过滤文件中以#开头的行,后面至少有一个空格
[root@localhost ~]# grep -E \'^#\\ +\' a.sh
12、查询出/etc目录中包含多少个root
[root@localhost ~]# grep -Eor \'root\' /etc/ | wc -l
13、查询出所有的qq邮箱
[root@localhost ~]# grep -Er "[0-9a-zA-Z-_\\.]+@qq\\.com" a.sh
14、查询系统日志中所有的error
[root@localhost /]# grep -orE \'error\' /var/log/messages
15、删除某文件中以s开头的行的最后一个词
[root@localhost /]# grep -E \'^s\' /etc/passwd|sed -r \'s/[0-9a-zA-Z]+$//g\' [file]
16、删除一个文件中的所有数字
[root@localhost /]# sed -r \'s/[0-9]+//g\' /root/a.sh
17、显示奇数行
[root@localhost /]# awk \'{if(NR%2==1)print NR,$0}\' /root/a.sh[root@localhost /]# awk \'NR%2==1{print NR,$0}\' /root/a.sh1 asdfgdghgf aadadadad3 asd adas sdasdas asdasdahgf5 baaaaaaaaaaaaaaaaaaaabbbbbbbb7 ppppp9 das1231423434gfdgfgfdgdf11 s1111ssss asdsgfh13 sagdfg3356fff
18、删除passwd文件中以bin开头的行到nobody开头的行
[root@web02 ~]# sed -r \'/^bin/,/^nobody/d\' /etc/passwd
19、从指定行开始,每隔两行显示一次
awk -F: \'{if(NR>3){num=(NR-3)%2; if(num){print $0}}}\' /etc/passwd# 没写
20、每隔5行打印一个空格
[root@localhost /]# awk -F: \'{if(NR%5==0){print " "}print $0}\' /root/a.sh
21、不显示指定字符的行
[root@localhost /]# grep -Ev \'g\' a.sh
22、将文件中1到5行中aaa替换成AAA
[root@localhost /]# sed -r \'1,5 s/a/A/g\' /root/a.sh | head -n5Asdfgdghgf AAdAdAdAdsdAsdAsdA hjhjjgAsd AdAs sdAsdAs AsdAsdAhgfAsdAs AsdAsdAd AdAsdAsdbAAAAAAAAAAAAAAAAAAAAbbbbbbbb
23、显示用户id为奇数的行
[root@localhost /]# awk -F: \'{if ($3%2==1) print NR,$0}\' /etc/passwd2 bin:x:1:1:bin:/bin:/sbin/nologin4 adm:x:3:4:adm:/var/adm:/sbin/nologin6 sync:x:5:0:sync:/sbin:/bin/sync8 halt:x:7:0:halt:/sbin:/sbin/halt10 operator:x:11:0:operator:/root:/sbin/nologin13 nobody:x:99:99:Nobody:/:/sbin/nologin15 dbus:x:81:81:System message bus:/:/sbin/nologin16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin17 tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin18 abrt:x:173:173::/etc/abrt:/sbin/nologin20 postfix:x:89:89::/var/spool/postfix:/sbin/nologin21 mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
24、显示系统普通用户,并打印系统用户名和id
[root@localhost /]# awk -F: \'{if($3>=1000){print "用户名:" $1"用户id:"$3}}\' /etc/passwd用户名:hammer用户id:1000
25、统计nginx日志中访问量(ip唯独计算)
[root@localhost ~]# awk \'/([0-9]{1,3}\\.){3}[0-9]{1,3}/{arr[$1]++}END{for(i in arr){print i}}\' access.log
26、实时打印nginx的访问ip
[root@localhost ~]# grep -oE \'[0-9a-zA-Z]+\' /etc/php.ini | awk \'{arr[$1]++}END{for(i in arr){printf "%-15s | %-5d\\n", i, arr[i]}}\'
27、统计php.ini中每个词的个数
[root@localhost ~]# egrep -o "[a-Z]+" php.ini | wc -l
28、统计1分钟内访问nginx次数超过10次的ip
#!/bin/bashNGINX_LOG=/var/log/nginx/access.logTIME=`date +%s`DATE=`echo $TIME - 3600 | bc`declare -A IPwhile read linedotimestamp=`echo $line | grep -oE \'[0-9]{4}.*T[0-9]{2}:[0-9]{2}:[0-9]{2}\'`timestamp=`date -d "$timestamp" +%s`if (( $TIME >= $timestamp && $DATE <= $timestamp ));thenip=`echo $line| grep -oE \'([0-9]{1,3}\\.){3}[0-9]{1,3}\'`number=`echo ${IP["$ip"]} | wc -L`[ $number -eq 0 ] && IP["$ip"]=0num=${IP["$ip"]}IP["$ip"]=`echo "$num + 1" | bc`fidone < $NGINX_LOGfor i in ${!IP[*]}doif (( ${IP[$i]} >= 10 ));thenecho $ifidone
29、找出nginx访问的峰值,按每个小时计算
#!/bin/bashNGINX_LOG=/var/log/nginx/access.logdeclare -A IPwhile read linedotimestamp=`echo $line | grep -oE \'[0-9]{4}.*T[0-9]{2}:[0-9]{2}:[0-9]{2}\'`timestamp=`date -d "$timestamp" +%Y%m%d%H`number=`echo ${IP["$timestamp"]} | wc -L`[ $number -eq 0 ] && IP["$timestamp"]=0num=${IP["$timestamp"]}IP["$timestamp"]=`echo "$num + 1" | bc`done < $NGINX_LOGfor i in ${!IP[*]}doif (( ${IP[$i]} >= 10 ));thenecho "$i ${IP[$i]}"fidone
30、统计访问nginx前10的ip
grep -oE \'([0-9]{1,3}\\.){3}[0-9]{1,3}\' /var/log/nginx/access.log | sort | uniq -c | sort -r | head
【如写错,请指正】