三剑客正则练习

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

awk '/^[sS]/' /proc/meminfo
grep -Ei  "^s"   /proc/meminfo
sed -nr '/^[sS]/p' /proc/meminfo 

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

uname -a | awk  '{print $1,$2,$3}'

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

cat /etc/init.d/functions  | grep -o "(.*)"

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

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

ip a | grep -Eo "([0-9]{1,3}\.+){3}[0-9]{1,3}" 
ip a  | sed -nr '3,15s#^.*t (.*)/.*$#\1#gp'
 ip a | sed -n '3p;9p;15p'| awk -F'[ /]+' '{print$3}' 

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

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

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

grep -vE '^$|^#' /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 -E "[0-9]+\@([a-z0-9]+){2,3}\.([a-z]+){3}"  /2.txt

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

 grep -nr "error" /var/log/

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

grep -E '^s' /etc/passwd|sed -r s/[a-zA-Z0-9]+$//g
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、显示奇数行

cat /etc/passwd | awk 'NR%2==1{print $0}'

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 

awk -F: '{print $0;num=NR%5;if(!num){print ""}}' /etc/passwd

awk -F: '{print $0;if(NR%5==0){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: '$3<500 && $3>0 {print $1,$3}' /etc/passwd
awk -F: '{if($3>1000){print $1,$3}}' /etc/passwd

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

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

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

egrep -o "[a-Z]+" php.ini | wc -l | wc -c

26、实时打印nginx的访问ip

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

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

awk '{print $1}' /var/log/nginx/access.log | uniq -c | sort | awk '1,10{print $2}'
posted @ 2021-12-23 21:29  hai起奈  阅读(61)  评论(0编辑  收藏  举报