linux之三剑客awk/sed/grep 练习题
1、找出/proc/meminfo文件中以s开头的行,至少用三种方式忽略大小写
awk '/^[sS]/' /proc/meminfo
grep -Ei '^ *s' /proc/meminfo
grep -E '^[sS]' /proc/meminfo
sed -r -n '/^[sS]/p' /proc/meminfo
awk '/^ *[sS]/{print $0}' /proc/meminfo
2、显示当前系统上的以root,centos或者user开头的信息
awk -F: '/^(root|centos|user)/{print $0}' /etc/passwd
grep -Er '^(root|centos|user)' /etc/passwd
3、找出/etc/init.d/functions文件下包含小括号的行
awk '/\(.*\)/{print $0}' /etc/init.d/functions
grep -E '\(.*\)' /etc/init.d/functions
grep -E '\(|\)' /etc/init.d/functions
4、输出指定目录的基名
pwd | awk -F/ '{print $NF}'
5、找出网卡信息中包含的数字
grep -E '[0-9]*' /etc/sysconfig/network-scripts/ifcfg-ens3[23]
6、找出/etc/passwd下每种解析器的用户个数
awk -F: '{print $NF}' /etc/passwd | sort | uniq -c
awk -F: '{arr[$NF]++}END{for(i in arr){print i,arr[i]}}' /etc/passwd
7、过滤网卡中的ip,用三种方式实现
ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
ip a | sed -r -n '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' : 只能过滤包含以上信息的行
ip a | awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{if(NR==3){print $2}else{print $2,$4}}'
8、搜索/etc目录下,所有的.html或.php文件中main函数出现的次数
grep -rE 'main' `find /etc/ -name "*.html" -o -name "*.php" | xargs` | wc -l
9、过滤掉php.ini中注释的行和空行
grep -vE '^\ *;|^$' /etc/php.ini
10、找出文件中至少有一个空格的行
awk '/\ +/{print $0}' 2.txt
grep -E '\ +' 2.txt
11、过滤文件中以#开头的行,后面至少有一个空格
grep -vE '^ *#\ +' 2.txt
12、查询出/etc目录中包含多少个root
grep -roE 'root' /etc/ | wc -l
13、查询出所有的qq邮箱
grep -E '[a-zA-Z0-9_\-]+@qq\.com' 2.txt
14、查询系统日志中所有的error
grep -Eir 'error' /var/log/
15、删除某文件中以s开头的行的最后一个词
# grep -Ei '^s' test1.txt | grep -oE '[0-9a-zA-Z]+' | xargs | awk '{for(i=0;i<(NF-1);i++){print $1}}'
sed -r 's/^s.*.$//g' test1.txt
16、删除一个文件中的所有数字
sed -r 's/[0-9]//g' 2.txt
17、显示奇数行
awk -F: 'NF%2==1{print $0}' 2.txt
18、删除passwd文件中以bin开头的行到nobody开头的行
sed -r '/^bin/,/^nobody/d' /etc/passwd
19、从指定行开始,每隔两行显示一次
awk -F: '{n=5;if(NR<n){print $0}else{if((NR-5)%2==0){print "---"};print $0}}' /etc/passwd
20、每隔5行打印一个空行
awk '{if(NR%5==0){print " "};print $0}' 2.txt
21、不显示指定字符的行
grep -vE '2' 2.txt
22、将文件中1到5行中aaa替换成AAA
sed -r '1,5 s/aaa/AAA/g' 2.txt
23、显示用户id为奇数的行
awk -F: '$3%2==1{print $0}' /etc/passwd
24、显示系统普通用户,并打印系统用户名和id
awk -F: '$3>=1000{print $1,$2}' /etc/passwd
25、统计nginx日志中访问量(ip唯独计算)
awk '/([0-9]{1,3}\.){3}[0-9]{1,3}/{arr[$1]++}END{for(i in arr){print i}}' access.log
26、实时打印nginx的访问ip
grep -oE '[0-9a-zA-Z]+' /etc/php.ini | awk '{arr[$1]++}END{for(i in arr){printf "%-15s | %-5d\n", i, arr[i]}}'