20@shell之三剑客awk,sed,grep全局练习题的总述详解

1、找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写

grep -Ei "^s" /proc/meminfo awk '/^[sS]/' /proc/meminfo grep -Ei '^s' /proc/meminfo awk '/^ [sS]/{print $0}' /proc/meminfo sed -nr '/ ^ [sS]/p' /proc/meminfo

2、显示当前系统上的root,centos或者user的信息

grep -Erl "(root|centos|user)" /

3、找出/etc/init.d/function文件下包含小括号的行

grep -E "(.*)" /etc/init.d/function

4、输出指定目录的基名

echo /etc/passwd | grep -Eo "[^/]*$" pwd | awk -F/ '{print $NF}'

5、找出网卡信息中包含的数字

ip a |grep -Eo "[0-9]+"

6、找出/etc/passwd下每种解析器的用户个数

awk -F: '{printf "用户名:%-20s 解释器:%-5s\n",$1,$NF}' /etc/passwd |sort | uniq -c
#!/bin/bash declare -A arrary while read line do res=`echo $line |awk -F: '{print $NF}'` let arrary[$res]++ done < 1.txt for i in ${!arrary[*]} do echo $i:${arrary[$i]} done awk -F: '{print $NF}' /etc/passwd | sort | uniq -c awk -F: '{num[$NF]++}END{for (i in num){printf "%-15s : %s\n",i,num[i]}}' /etc/passwd

7、过去网卡中的ip,用三种方式实现

ip a | grep -Eo "([0-9]{1,3}\.+){3}[0-9]{1,3}"

8、搜索/etc目录下,所有的.html或.php文件中main函数出现的次数

grep -Erl "(*.html|*.php)" / find ./ -name "*.html" -o -name "*.php" -exec grep -R "main" {} \;

9、过滤php.ini中注释的行和空行

grep -E "^[ ^;|\ ]" /etc/php.ini grep -vE '^$|^#' /etc/php.ini grep -E "^[^#]" /etc/php.ini

10、找出文件中至少有一个空格的行

grep -Er "(\ |\ +)" 1.txt

11、过滤文件中以#开头的行,后面至少有一个空格

grep -E "(^#|^#\ +)" 1.txt

12、查询出/etc目录中包含多少个root

grep -Erw "root" /etc/ |wc -l

13、查询出所有的qq邮箱

grep -Er "[0-9]+\@([a-z]+){2}\.([a-z]+){3}" 2.txt

14、查询系统日志中所有的error

grep -nrw "error" /var/log/

15、删除某文件中以s开头的行的最后一个词

egrep '^s' /etc/passwd|sed -r s/[a-zA-Z0-9]+$//g sed -r 's/(^s.*\/)[a-z]+/\1/g' /etc/passwd

16、删除一个文件中的所有数学

sed -ri '/[0-9]/d' 2.txt sed -ri 's/[0-9]//g' 2.txt

17、显示奇数行

奇数:awk 'NR%2' 1.txt 偶数: sed -n '1,$n;p' 1.txt sed -n '1,$p;n' 1.txt sed '2~2d' 1.txt awk '{if (NR%2){print $0}}' /etc/passwd

18、删除passwd文件中以bin开头的行到nobody开头的行

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行打印一个空格

sed 'N;N;N;N;/^$/d;G' 1.txt sed 'N;N;N;N;G' 1.txt awk -v n=5 '1; NR % n == 0 {print ""}' 1.txt awk -F: '{print $0;num=NR%5;if(!num){print ""}}' /etc/passwd

21、不显示指定字符的行

grep -v 1.txt

22、将文件中1到5行中aaa替换成AAA

sed -r '1,5s/aaa/AAA/' 2.txt

23、显示用户id为奇数的行

awk -F: '{if($3%2){print $0}}' /etc/passwd awk -F: '$3%2 {print $0}' /etc/passwd

24、显示系统普通用户,并打印系统用户名和id

awk -F: '{if($3>=1000){print $1,$3}}' /etc/passwd awk -F: '$3<500 && $3>0 {print $1,$3}' /etc/passwd

25、统计nginx日志中访问量(ip唯独计算)

grep -Ec '([0-9]{1,3}\.){3}[0-9]{1,3}' /var/log/nginx/access.log /var/log/nginx/access.log

26、实时打印nginx的访问ip

tail -f /var/log/nginx/access.log | awk '{print $1}'

27、统计php.ini中每个词的个数

egrep -o "[a-Z]+" php.ini | wc -l grep -Eow '[0-9a-zA-Z]+' /etc/php.ini | awk '{words[$1]++}END{for (i in words){print i,words[i]}}'

28、统计1分钟内访问nginx次数超过10次的ip

#!/bin/bash NGINX_LOG=/var/log/nginx/access.log TIME=`date +%s` DATE=`echo $TIME - 3600 | bc` declare -A IP while read line do timestamp=`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 ));then ip=`echo $line| grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'` number=`echo ${IP["$ip"]} | wc -L` [ $number -eq 0 ] && IP["$ip"]=0 num=${IP["$ip"]} IP["$ip"]=`echo "$num + 1" | bc` fi done < $NGINX_LOG for i in ${!IP[*]} do if (( ${IP[$i]} >= 10 ));then echo $i fi done

29、找出nginx访问的峰值,按每个小时计算

#!/bin/bash NGINX_LOG=/var/log/nginx/access.log declare -A IP while read line do timestamp=`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"]=0 num=${IP["$timestamp"]} IP["$timestamp"]=`echo "$num + 1" | bc` done < $NGINX_LOG for i in ${!IP[*]} do if (( ${IP[$i]} >= 10 ));then echo "$i ${IP[$i]}" fi done

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 awk '{print $1}' 2.txt | uniq -c | sort | awk '1,10{print $2}'

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121507.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示