04-[ 面试题答案]三剑客及相关命令笔试题集合及参考答案

第1章 原题及讲解视频

1.1 原题地址:
[面试题]老男孩教育 -三剑客笔试题集合
https://www.jianshu.com/p/61d8883719ac

1.2 讲解视频地址
面试题讲解系列-三剑客面试题 -三十道面试题让你玩转 sed 和 awk
https://www.bilibili.com/video/av51101676

第2章 三剑客-基础部分题目

 每道题目尽量 多种方法
 涉及到三剑客过滤 替换 取列操作 。
2.1 Linux 三剑客的题目如何 举一反三?
 熟悉三剑客基本操作
grep
sed
awk
 sed 和 awk 的 执行过程
 只要遇到三剑客或 find 题目,多种方法。

2.2 选择
2.2.1 在给定文件中查找与条件相符字符串的命令及查找某个目录下相应文件的命令为:(多选) AC
 A:grep
 B:gzip
 C:find
 D:sort

2.2.2 在给定文件中查找与设定条件相符字符串的命令为( grep)

2.2.3 (D) 命令可以从文本文件的每一行中截取指定内容的数据。
 A cp
 B dd
 C fmt #根据参数重新显示 规划 每一行的内容 比如 每一行显示 10 个 字符 等等
 D cut

2.2.4 下面表述错误的是 D
 表示开头,如 ^abc 表示以 abc 开头的
 表示结尾如 abc$ 表示以 abc 为结尾的
 表示前一个字符出现 0 或 1 次,如 ab c 表示 a 与 c 之间可有 0 或 1 个 b 存在
 表示前一个字符出现 0 或多次。如 ab+c 表示 a 与 c 之间可有 0 或多个 b 存在

2.3 填空
2.3.1 Unix 中在当前目录下所有 .cc 的文件中找到含有"asiainfo"内容的文件,命令为

[root@oldboy64-yl ~]# find . -type f -name '*.cc' -exec grep 'asiainfo' {} \;
[root@oldboy64-yl ~]# find . -type f -name '*.cc'|xargs grep 'asiainfo'
[root@oldboy64-yl ~]# grep 'asiainfo' `find . -type f -name '*.cc'`

如果没有指定扩展名则直接使用

[root@oldboy64-yl ~]# grep -Rl 'oldboy' ./*
./access.log
./anaconda-ks.cfg
./cmatrix-1.2a/config.status
./etc/group-
./etc/group

-r 递归查询
-R 与-r类似 只不过多了可以处理软链接
-l 只显示 grep 查找出来的文件名

2.3.2 使用 AWK 指定分隔符的参数是(-F) 或 (-vFS=)
eg:
FS Field Separator 字段分隔符,每一列的结束标记

[root@oldboy64-yl ~]# awk -F':' '{print $1}' /etc/passwd
root
bin
daemon
adm
[root@oldboy64-yl ~]# awk -vFS=':' '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
[root@oldboy64-yl ~]# awk 'BEGIN{FS=":"}{print $1,$3}' /etc/passwd 
root 0
bin 1
daemon 2
adm 3

最后这种方法不推荐了,推荐 前 两种方法
2.4 简答
2.4.1 找出当前目录下包含 127.0.0.1 关键字的文件?
方法1

[root@oldboy64-yl ~]# grep -Rl '127.0.0.1' ./

方法2 三剑客 +反引号

[root@oldboy64-yl ~]# grep '127.0.0.1' `find . -type f`
[root@oldboy64-yl ~]# sed -n '/127.0.0.1/p' `find . -type f`
[root@oldboy64-yl ~]# awk '/127.0.0.1/' `find . -type f`

方法3 find |xargs+三剑客

[root@oldboy64-yl ~]# find . -type f |xargs grep '127.0.0.1'
[root@oldboy64-yl ~]# find . -type f |xargs sed -n '/127.0.0.1/p'
[root@oldboy64-yl ~]# find . -type f |xargs awk '/127.0.0.1/'

方法4 find -exec + 三剑客

[root@oldboy64-yl ~]# find . -type f -exec grep '127.0.0.1' {} \;
[root@oldboy64-yl ~]# find . -type f -exec sed -n '/127.0.0.1/p' {} \;
[root@oldboy64-yl ~]# find . -type f -exec awk '/127.0.0.1/' {} \;

小结:
1.grep
过滤方法 -Rl
2.find 命令与三剑客过滤的用法

2.4.2 删除 /显示 1.txt 文件第 3 行到第 10 行的内容?
2.4.2.1 删除

[root@oldboy64-yl ~]# sed '3,10d' 1.txt
[root@oldboy64-yl ~]# awk 'NR<=3||NR>10' 1.txt 
[root@oldboy64-yl ~]# awk '!(NR>=3&&NR<=10)' 1.txt 

说明
 NR 在 awk 中内置变量表示 Number Of Field 记录号(行号)
 &&表示并且 同时成立
|| 表示或者
 ; 分隔多条命令,让你在同一行执行多条命令
 NR>=3 && NR<=10 把第 3 行到第 1 0 行取出来
! 表示取反
 ()被括起来的内容 整体

2.4.2.2 显示

[root@oldboy64-yl ~]# sed -n '3,10p' 1.txt 
[root@oldboy64-yl ~]# awk 'NR==3,NR==10' 1.txt 
[root@oldboy64-yl ~]# awk 'NR>=3 && NR<=10' 1.txt 
[root@oldboy64-yl ~]# head -10 num.txt |tail -8
3
4
5
6
7
8
9
10

2.4.2.3 玩赖的了解下

[root@oldboy64-yl ~]# grep -n '.' num.txt|grep -A7 '^3:'
3:3
4:4
5:5
6:6
7:7
8:8
9:9
10:10

2.4.3 使用 awk 取出 /etc/passwd 第一列数据也就是取出用户名。
2.4.3.1 基础必备

[root@oldboy64-yl ~]# awk -F':' '{print $1}' /etc/passwd
root
bin
daemon
[root@oldboy64-yl ~]# cut -d: -f1 /etc/passwd
root
bin
daemon
[root@oldboy64-yl ~]# sed 's#:.*##g' /etc/passwd
root
bin
daemon
[root@oldboy64-yl ~]# egrep -o '^[0-Z_-]+' /etc/passwd
root
bin
daemon

说明
[ 0-Z ] == [a-zA-Z0-9]
 cut -d 指定 分隔符, -d1 次 只能指定 1 个 符号作为分隔符
 cut -f 取列 , -f1 -f2 -f1,2,3 -f1-5

2.4.3.2 提高

[root@oldboy64-yl ~]# egrep -o '^[^:]+' /etc/passwd
root
bin
daemon
[root@oldboy64-yl ~]# sed -r 's#(^[^:]+).*#\1#g' /etc/passwd
[root@oldboy64-yl ~]# awk '{gsub(/:.*/,"");print}' /etc/passwd
[root@oldboy64-yl ~]# awk '{gsub(/:.*/,"")}1' /etc/passwd

说明:
 print 在 awk 中后面什么都不加 的 时候 表示 print $0
参考视频讲解部分:
面试题讲解系列-三剑客面试题- 三十道面试题让你玩转 sed 和 awk
https://www.bilibili.com/video/av51101676

2.4.4 用命令行更改 config.txt 文件,把里面所有的 "name" 更改为 "address"

[root@oldboy64-yl ~]# sed 's#name#address#g' config.txt 
address
[root@oldboy64-yl ~]# awk '{gsub(/name/,"address")}1' config.txt 
address
[root@oldboy64-yl ~]#

扩展
vi/vim 里面也可以进行替换

:%s#name#address#g   

2.4.5 利用 sed 命令将 test.txt 中所有的回车替换成空格?
【吃饭的家伙】01 -老男孩教育 -三剑客- sed 执行流程
https://www.jianshu.com/p/46c02da0598e
2.4.5.1 方法 1 把每一行内容追加到 Hold Space 中,最后 1 行弄回到 P attern space 中 然后进行替换
基础版

[root@oldboyedu show01 ~]# seq 10 |sed n 'H;$x;s# n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu s how01 ~]# seq 10 |sed n '1h;1!H;$x;s# n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu show01 ~]# seq 10 |sed n 'H;$x;s# n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu show01 ~]# seq 10 |sed n 'H;${x;s# n# #gp}'
1 2 3 4 5 6 7 8 9 10

加强版
上面的方法每一行开头多个空格

[roo t@oldboyedu show01 ~]# seq 10 |sed n '1h;1!H;$x;s# n# #gp'
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu show01 ~]# seq 10 |sed n '1h;1!H;${x;s# n# #gp}'
1 2 3 4 5 6 7 8 9 10

备注:h,H,N 的含义参考
【进阶】04 -老男孩教育- sed 命令模式空间及保持空间命令
https://www.jianshu.com/p/770b69cdbbb0

2.4.5.2 方法 2 sed 命令的“循环 (标签 )”方法

[root@oldboyedu show01 ~]# seq 10 |sed ':label ;N;s# n# #g;t label'
1 2 3 4 5 6 7 8 9 10

2.4.5.3 方法 3 tr
如果不用
sed 直接用 tr 即可

[root@oldboy64-yl ~]# seq 10 |tr "\n" " "
1 2 3 4 5 6 7 8 9 10

2.4.5.4 方法 4 awk 修改 ORS
ORS是 Output Record Separator 输出分隔符,用来指定 awk 在显示每一行的时候每一行的结尾是什么默认是回车 这里改成了空格。正好符合题意,把回车替换成空格

1 2 3 4 5 6 7 8 9 10 [root@oldboy64-yl ~]# seq 10 |awk -vORS=" " '1'
1 2 3 4 5 6 7 8 9 10 
[root@oldboy64-yl ~]# seq 10 |awk -vORS=" " '{print $0}'
1 2 3 4 5 6 7 8 9 10

2.4.6 写出查询 file.txt 以 abc 结尾的行

[root@oldboy64-yl ~]# grep 'abc$' file.txt 
[root@oldboy64-yl ~]# sed -n '/abc$/p' file.txt 
[root@oldboy64-yl ~]# awk '/abc$/' file.txt

说明:
awk可以过滤 时候精确到某一列

[root@oldboy64-yl ~]# awk '/nologin$/' /etc/passwd

补充说明
$0 表示一整行

[root@oldboy64-yl ~]# awk '$0~/abc$/' file.txt 

2.4.7 删除 file.txt 文件中的空行
模拟环境:

[root@oldboy64-yl ~]# echo -e 'oldboy \noldboy \n \nalex \n \nalex lidao lidao alex \n oldboy \n \noldboyedu group 598972270' >file.txt 

2.4.7.1 必会: 仅删除文件中的空行

[root@oldboy64-yl ~]# grep -v '^$' file.txt 
[root@oldboy64-yl ~]# sed '/^$/d' file.txt
[root@oldboy64-yl ~]# awk '!/^$/' file.txt 

2.4.7.2 提升 :文件中 的空行可能是 只有 空格 的 行

[root@oldboy64-yl ~]# egrep -v '^$|^ $' file.txt 
[root@oldboy64-yl ~]# grep -v '^ $' file.txt 
[root@oldboy64-yl ~]# awk '!/^ *$/' file.txt
[root@oldboy64-yl ~]# sed  '/^ *$/d' file.txt

思考
如果还可能包含 t ab 键
说明:
 ^ *表示两种情况  *表示前 1 个字符出现 0 次的时候:^
 *表示前 1 个字符出现 1 次及 1 次以上的时候 :^ +$

2.4.8 打印 file.txt 文件中的第 10 行

[root@oldboy64-yl ~]# sed -n '10p' file.txt 
[root@oldboy64-yl ~]# head file.txt |tail -1
[root@oldboy64-yl ~]# awk 'NR==10' file.txt 

2.4.9 删除 /etc/fstab 文件中所有以 开头的行的行首的 # 号及 后面的所有空白字符;
空白字符
 空格
 多个空格
 tab 键
此题
可以分为两个题目

  1. 删除 /etc/fstab 文件中所有以 开头的行的行首的 # 号及 后面的所有空白字符
  2. 删除 /etc/fstab 文件中所有以 开头的行的行首的 # 号及 后面的 连续 的空白字符
    2.4.9.1 删除 /etc/fstab 文件中所有以 开头的行的行首的 # 号及 后面的所有空白字符
    可以
    分为两步 哪个是 条件 ,哪个是 动作
     第 1 步 找出以 开头 的行
     第 2 步 在删除这一行中的空白字符 和行首的井号
[root@oldboy64-yl ~]# sed -r '/^#/s@^#|[ \t]+@@g' /etc/fstab 
[root@oldboy64-yl ~]# awk '/^#/{gsub(/^#|[ \t]+/,"")}1' /etc/fstab

2.4.9.2 删除 /etc/fstab 文件中所有以 开头的行的行首的 # 号及 后面 的 连续 的空白字符

[root@oldboy64-yl ~]# awk '{gsub(/^#[ \t]+/,"")}1' /etc/fstab  
#
/etc/fstab
Created by anaconda on Sun Jun 30 17:47:28 2019
#
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=47ec2d05-84dd-4131-86ec-426c706e9c01 /                       xfs     defaults        0 0
UUID=daff218d-4ecc-484c-a479-efabd96c0467 /boot                   xfs     defaults        0 0
UUID=f8a73e41-694e-4e02-bbb0-3dbc06d90f25 swap                    swap    defaults        0 0
/dev/sda3 /data xfs defaults 0 0
[root@oldboy64-yl ~]# sed -r 's@^#[ \t]+@@g' /etc/fstab 

#
/etc/fstab
Created by anaconda on Sun Jun 30 17:47:28 2019
#
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=47ec2d05-84dd-4131-86ec-426c706e9c01 /                       xfs     defaults        0 0
UUID=daff218d-4ecc-484c-a479-efabd96c0467 /boot                   xfs     defaults        0 0
UUID=f8a73e41-694e-4e02-bbb0-3dbc06d90f25 swap                    swap    defaults        0 0
/dev/sda3 /data xfs defaults 0 0
[root@oldboy64-yl ~]# 

2.4.10 查找最后创建时间是 3 天前,后缀是 *.log 的文件并删除
假设目录是 /oldboy

2.4.10.1 方法 1 find +xargs

[root@oldboy64-yl ~]# find /oldboy/ -type f -mtime +3 -name '*.log'|xargs rm -f

2.4.10.2 方法 2 find +$() 或``

[root@oldboy64-yl ~]# \rm -f $(find /oldboy/ -mtime +3 -type f -name "*.log")
[root@oldboy64-yl ~]# \rm -f `find /oldboy/ -mtime +3 -type f -name '*.log'`

2.4.10.3 方法 3 find -exec

[root@oldboy64-yl ~]# find /oldboy/ -type f -mtime +3 -name '*.log' -exec rm -f {} \;

说明
 ;形式 -exec find 命令找出 1 个文件就把文件放在{} 的位置

2.4.10.4 方法 4

[root@oldboy64-yl ~]# find /oldboy/ -type f -mtime +3 -name '*.log' -exec rm -f {} +

说明
 如果 -exec 后面使用 find 会把前面找到的所有文件 1 次性的放在{} 所在位置

2.4.10.5 方法 5

[root@oldboy64-yl ~]# find /oldboy/ -type f -mtime +3 -name '*.log' -delete 

-delete 删除
2.4.10.6 方法 6

[root@oldboy64-yl ~]# find /oldboy/ -type f -mtime +3 -name '*.log' |xargs -i rm -f {}

2.4.11 查找文件中 1 到 20 行之间,同时将 "aaa" 替换为 "AAA","ddd" 替换 "DDD"

[root@oldboy64-yl /oldboy]# cat lidao.txt 
a b c d e f g h i j k l m n o p q r s t u v w x y z
aaadddaaaddd
aaadddaaaddd
aaadddaaaddd
[root@oldboy64-yl /oldboy]#

思路
1: 简单 的替换 aaa 替换为 AAA ddd 替换为 DDD
 awk 'NR==1,NR==20{gsub(/aaa/,"AAA");gsub(/ddd/,"DDD")}1' lidao.txt
 sed '1,20{s#aaa#AAA#g;s#ddd#DDD#g}' lidao.txt

[root@oldboy64-yl /oldboy]# awk 'NR==1,NR==20{gsub(/aaa/,"AAA");gsub(/ddd/,"DDD")}1' lidao.txt 
a b c d e f g h i j k l m n o p q r s t u v w x y z
AAADDDAAADDD
AAADDDAAADDD
AAADDDAAADDD
[root@oldboy64-yl /oldboy]# sed '1,20{s#aaa#AAA#g;s#ddd#DDD#g}' lidao.txt 
a b c d e f g h i j k l m n o p q r s t u v w x y z
AAADDDAAADDD
AAADDDAAADDD
AAADDDAAADDD
[root@oldboy64-yl /oldboy]# 

思路2: 大小写 转换,把小写字母转换为 大写 字母
 tr 'ad' 'AD' <lidao.txt
 sed 'y/ad/AD/' lidao.txt
 awk '{print toupper($0)}' lidao.txt
 sed 's#[ad]# \U&#g' lidao.txt

[root@oldboy64-yl /oldboy]# tr 'ad' 'AD' < lidao.txt 
A b c D e f g h i j k l m n o p q r s t u v w x y z
AAADDDAAADDD
AAADDDAAADDD
AAADDDAAADDD
[root@oldboy64-yl /oldboy]# sed 'y/ad/AD/' lidao.txt 
A b c D e f g h i j k l m n o p q r s t u v w x y z
AAADDDAAADDD
AAADDDAAADDD
AAADDDAAADDD
[root@oldboy64-yl /oldboy]# 

说明:
sed命令中 y/// 类似于 tr1 对 1 替换,但是不能使用 a-z A-Z 范围

[root@oldboy64-yl /oldboy]# awk '{print toupper($0)}' lidao.txt 
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
AAADDDAAADDD
AAADDDAAADDD
AAADDDAAADDD
[root@oldboy64-yl /oldboy]# sed 's#[ad]#<&>#g' lidao.txt 
<a> b c <d> e f g h i j k l m n o p q r s t u v w x y z
<a><a><a><d><d><d><a><a><a><d><d><d>
<a><a><a><d><d><d><a><a><a><d><d><d>
<a><a><a><d><d><d><a><a><a><d><d><d>
[root@oldboy64-yl /oldboy]# sed 's#[ad]#\U&#g' lidao.txt 
A b c D e f g h i j k l m n o p q r s t u v w x y z
AAADDDAAADDD
AAADDDAAADDD
AAADDDAAADDD

思路3 :1 到 2 0 行 大小写 转换,把小写字母转换为 大写 字母
 sed -n '1,20p' lidao.txt| tr 'ad' 'AD'
 awk 'NR==1,NR==20 {print toupper(0)}' lidao.txt  awk 'NR>=1&&NR<=20{print toupper(0)}' lidao.txt
 sed '1,20s#[ad]# U&#g' lidao.txt
 sed ' 1,20 y/ad/AD/' lidao.txt

2.4.12 使用 sed 命令打印出文件的第一行到第三行
 head -3 file.txt
 sed -n '1,3p' file.txt
 awk 'NR==1,NR==3' oldboy.txt
 awk 'NR>=1&&NR<<=3' oldboy.txt
 awk 'NR<<=3' oldboy.txt

2.4.13 在 /var/sync/log/cef_watchd 20080424.1og 文件中查找大小写不敏感 “ 字符串中的命令是
 grep -i " mysql " /var/sync/log/cef_watchd 20080424.log
 sed -n '/[a-z]/Ip' /var/sync/log/cef_watchd 20080424.log
 awk -vIGNORECASE=1 '/[a-z]/' /var/sync/log/cef_watchd 20080424.log

[root@oldboy64-yl /oldboy]# sed -n '/[a-z]/Ip' lidao.txt 
a b c d e f g h i j k l m n o p q r s t u v w x y z
aaadddaaaddd
aaadddaaaddd
aaadddaaaddd
[root@oldboy64-yl /oldboy]# awk '/[a-z]/' lidao.txt 
a b c d e f g h i j k l m n o p q r s t u v w x y z
aaadddaaaddd
aaadddaaaddd
aaadddaaaddd
[root@oldboy64-yl /oldboy]# awk -vIGNORECASE=1 '/[a-z]/' lidao.txt 
a b c d e f g h i j k l m n o p q r s t u v w x y z
aaadddaaaddd
aaadddaaaddd
aaadddaaaddd
[root@oldboy64-yl /oldboy]#   #ignore case 忽略大小写

2.4.14 为了在 /var/sync/log 目录中查找更改时间在 5 日以前的文件并删除它们, linux 命令是
同上题目: 1.4.10 查找最后创建时间是 3 天前,后缀是 *.log 的文件并删 除

2.4.15 把 data 目录及其子目录下所有以扩展名 .txt 结尾的文件中包含 oldgirl 的字符串全部替换为oldboy.
同此题 查找最后创建时间是 3 天前,后缀是 *.log 的文件并删除
把删除改为sed 或 awk 替换

2.4.16 写出删除 abc.txt 文件中的空 行
同此题 1.4.7 删除 file.txt 文件中的空行

2.4.17 查看 linux 服务器 ip 的命令,同时只显示包含 ip 所在的行打印出来
hostname -I
ip a s eth0|awk F ‘[ /]+’ ‘NR==3{print $3}’

ip a s eth0|sed -rn ‘3s#^.*t(.*)/.*$# \1#gp’

[root@oldboy64-yl /oldboy]# ip a s eth0|awk -F'inet |/24' 'NR==3{print $2,$0}'
10.0.0.200     inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0

2.4.18 用 awk 获取文件中第三行的倒数第二列字段
awk 默认的 分隔符 就是空格,连续的空格, tab 键

[root@oldboy64-yl /oldboy]# awk 'NR==3{print $(NF-1)}' oldboy.txt

2.4.19 有文件 file1
 请用 shell 查询 file1 里面空行的所在行号
grep '^$' -n file1

awk '/^$/{print NR,$0}' file.txt

sed -n '/^$/{=;p}' file.txt|sed 'N;s#\n# #g'

[root@oldboy64-yl /oldboy]# awk '/^$/{print NR,$0}' file.txt
2 
[root@oldboy64-yl /oldboy]# sed -n '/^$/{=;p}' file.txt|sed 'N;s#\n# #g'
2
[root@oldboy64-yl /oldboy]# seq 10 | sed 'N;s#\n# #g'
1 2
3 4
5 6
7 8
9 10

 查询 file1 以 abc 结尾的行
 打印 file 文件第一行到第三行
参考上面的题目

2.4.20 显示 file 文件里匹配 foo 字串那行以及上下 5 行、显示 foo 及前 5 行、显示 foo 及后 5 行

grep "foo" B 5 file
grep "foo" A 5 file
grep "foo" C 5 file

2.4.21 echo "ABCDEF abtdefg" |sed -i s/c/t/g 这条命令是否正确?如若正确可能会显示什么样的结果?
不正确
-i 修改文件内容

no input files
sed 无法找到要修改的文件

必须熟练:单引号双引号 不加引号区别
https://www.jianshu.com/p/60a810af2656

2.4.22 当前系统中没有任何 文本编辑器( vi,emacs,vim,edit 等),如何 过滤 掉注释行和空行查看/etc/ssh/sshd_config 文件
awk '!/^#|^$/' /etc/ssh/sshd_config

egrep -v '^#|^$' /etc/ssh/sshd_config

sed -r '/^#|^$/d' /etc/ssh/sshd_config

sed -nr '/^#|^$/!p ' /etc/ssh/sshd_config

egrep '^[a-Z]' /etc/ssh/sshd_config

参考:
删除file.txt 文件中的空行

2.4.23 查找 file.log 文件中的包含关键字 “ 的内容,及其上下两行的内容 重 定向保存到 1.txt 。
请写出命令

[root@oldboy64-yl /oldboy]# grep 'helloword' -C 2|file.log > 1.txt

第3章 进阶题目:

需要用到awk数组和函数知识点
3.1 找出 ifconfig 命令结果中的 1-255 之间的数值;
net tools

[root@oldboy64-yl /oldboy]# ifconfig |egrep -o '[0-9]+' |awk '$0>=1 && $0<=255'
[root@oldboy64-yl /oldboy]# ifconfig |awk -vRS='[^0-9]+' '$0>=1 && $0<=255'

[root@oldboy64-yl /oldboy]# ifconfig |awk -vRS='[^0-9]+' '{print NR,$0}'

3.2 文件内容排序、文件行取唯一值的命 令分别是?
sort
uniq

3.3 用 awk 获取文件中第三行的倒数第二列字段

[root@oldboy64-yl /oldboy]# awk 'NR==3{print $(NF-1)}' file.txt
not

3.4 awk 是一个很强大的文本处理工具,请使用 awk 统计当前主机的并发访问量

[root@oldboy64-yl /oldboy]# netstat -ant |awk '/^tcp/{++state[$NF]} END {for(key in state) print key,state[key]}'
LISTEN 4
ESTABLISHED 1
[root@oldboy64-yl /oldboy]# ss -ant|awk '{++state[$1]}END{for (key in state) print key,state[key]}'
LISTEN 4
ESTAB 1
State 1

3.5 有一个文件 nginx.log ,请用 awk 提取时间( HH:MM 文件内容如下:

第 1 行内容 :l[20/jul/2017:10:35:14 +0800]|POST
/audiosearch/searchHTTP/1.1|200| lDalvik/1.6.0 linux;U;Android 4,4,4;Konka Android TV
638Build/KTU84P l --[5.069|5.001,0.005|www.ku yun.com|8771|172.21.19.67:8084,172.21.19.66:8084]
第 2 行 内容 : l[20/jul/2017:10:35:14 +0800]|POST
/audiosearch/searchHTTP/1.1|200| lDalvik/1.6.0 linux;U;Android 4,4,4;Konka Android TV
638Build/KTU84P l --[5.069|5.001,0.005|www.kuyun.com|8771|1 72.21.19.67:8084,172.21.19.66:8084]

[root@oldboy64-yl /oldboy]# cat nginx.log 
l[20/jul/2017:10:35:14 +0800]|POST/audiosearch/searchHTTP/1.1|200| lDalvik/1.6.0 linux;U;Android 4,4,4;Konka Android TV638Build/KTU84P l --[5.069|5.001,0.005|www.ku yun.com|8771|172.21.19.67:8084,172.21.19.66:8084]
l[20/jul/2017:10:35:14 +0800]|POST/audiosearch/searchHTTP/1.1|200| lDalvik/1.6.0 linux;U;Android 4,4,4;Konka Android TV005|www.kuyun.com|8771|1 72.21.19.67:8084,172.21.19.66:8084]
[root@oldboy64-yl /oldboy]# awk -F'2017:|:14' '{print $2}' nginx.log 
10:35
10:35
[root@oldboy64-yl /oldboy]# awk -F'/....:|:14 ' '{print $2}' nginx.log 
10:35
10:35
[root@oldboy64-yl /oldboy]# 

3.6 统计 apache 访问日志流量排名前 10 个 IP

[root@oldboy64-yl /oldboy]# awk '{h[$1]+=$10}END{for(p in h)print p,h[p]}' access.log|sort -rnk2|head

3.7 统计出 apache 的 access.log 中访问最多的 5 个 ip

[root@oldboy64-yl /oldboy]# awk '{h[$1]++}END{for(p in h)print p,h[p]}' access.log |sort -rnk2|head -5
[root@oldboy64-yl /oldboy]# awk '{print $1}' access.log|sort |uniq -c|sort -rnk2|head  -5

3.8 这条 linux 命令的含义: netstat n |awk '/^tcp/ {++h[$NF]} END {for(a in h) print a,h[a]}'
tcp11 状态 每种 状态的数量。

[root@oldboy64-yl /oldboy]# netstat  -n|awk '/^tcp/{++h[$NF]}END{for(a in h)print a,h[a]}'
ESTABLISHED 1

3.9 使用 awk 分析日志(最后一个字段是 IP ,统计访问量前十的 IP ,并进行排序

[root@oldboy64-yl /oldboy]# awk '{h[$NF]++}END{for(p in h)print p,h[p]}' access.log |sort -rnk2|head 
[root@oldboy64-yl /oldboy]# awk '{print $NF}' access.log|sort|uniq -c|sort -rnk2|head 

3.10 从 a.log 文件中提取包含 "WARNING"或 “ FATAL”,同时不包含 “ IGNOR"行,然后,提取以":"分割的第五个字段

[root@oldboy64-yl /oldboy]# awk -F: '/WARNING|FATAL/ && !/IGNOR/{print $5}' a.log
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,175评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,674评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,151评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,597评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,505评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,969评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,455评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,118评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,227评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,213评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,214评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,928评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,512评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,616评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,848评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,228评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,772评论 2 339

推荐阅读更多精彩内容