注意:所有的答案,仅供参考,所有的真正答案,以你自己的为准
1. (操作题)Vim模式实践
题目:在Vim中完成以下操作:
-
将文件
data.txt
中的所有old_text
替换为new_text
(仅替换每行第一个匹配项) -
将第5行到第10行内容复制到文件末尾
-
保存退出
data.txt 文件内容如下
this is old_text line 1
old_text is here in line 2
line 3 without old_text
old_text appears in line 4
line 5 with old_text
line 6 also has old_text
line 7 no old_text
line 8 old_text again
line 9 not the target
line 10 old_text final
提示命令:
:%s/old_text/new_text/ :5,10t$ :wq
2. (选择题)切割替换工具选择
场景:需要从log.txt
中提取每行的第3个字段(以空格分隔),以下哪个命令最合适?
A. grep -o '^[^ ]\{2\} [^ ]\+' log.txt
B. cut -d' ' -f3 log.txt
C. awk '{print $3}' log.txt
D. sed 's/^$\w\+$ $\w\+$ $\w\+$.*/\3/' log.txt
答案:B
3. (操作题)SED高级操作
题目:处理配置文件config.conf
,要求:
-
删除所有注释行(以
#
开头) -
将
timeout=30
替换为timeout=60
-
在文件开头添加
# Config updated at $(date)
config.conf 文件内容如下: # This is a sample config file server_port=8080 # The following is a timeout setting timeout=30 log_level=info
grep -v '^#' config.conf
sed -r 's/timeout=30/timeout=60/g' config.conf
编辑用sed -i
提示命令:
sed -i '/^#/d; s/timeout=30/timeout=60/; 1i # Config updated at $(date)' config.conf
4. (选择题)内容处理工具选择
场景:需要从CSV文件中提取第二列数据并去重,以下哪种工具最合适?
A. vim
B. awk
C. grep
D. sed
答案:B
awk '{print $2}' | uniq
5. (选择题)正则表达式匹配规则
以下哪个正则表达式可以匹配abc123
、xyz456
等格式的字符串?
A. [a-z]+[0-9]+
B. \d{3}-\d{4}
C. ^[a-zA-Z]+[0-9]+$
D. .*@\w+\.com
答案:C
A和C差不多,但只能字母在前数字在后,需要^表示在前,$表示在后。
6. (选择题)字符匹配
正则表达式[A-Za-z0-9]+
可以匹配以下哪种字符串?
A. user@123
B. Hello123
C. price:$100
答案:B
AC都是符号,[A-Za-z0-9]+只能匹配字母和数字
7. (操作题)锚定匹配实践
题目:用grep
从日志文件error.log
中找出以ERROR
开头且以timestamp
结尾的行。
提示命令:
grep '^ERROR.*timestamp$' error.log
grep -rn '^ERROR.*timestamp$' error.log
8. (操作题)日志分析实战
场景:分析Web服务器日志access.log
,完成以下任务:
-
提取所有访问失败的请求(状态码非200)
-
统计每个IP的失败次数
-
输出失败次数最多的前5个IP
access.log 文件内容如下: 192.168.1.100 - - [10/Jan/2025:13:55:36 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.101 - - [10/Jan/2025:13:55:37 +0000] "GET /about.html HTTP/1.1" 500 32 192.168.1.100 - - [10/Jan/2025:13:55:38 +0000] "POST /login.php HTTP/1.1" 403 24 192.168.1.102 - - [10/Jan/2025:13:55:39 +0000] "GET /contact.html HTTP/1.1" 404 17 192.168.1.101 - - [10/Jan/2025:13:55:40 +0000] "GET /products.html HTTP/1.1" 503 29 192.168.1.100 - - [10/Jan/2025:13:55:41 +0000] "GET /images/logo.png HTTP/1.1" 404 17 192.168.1.103 - - [10/Jan/2025:13:55:42 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.101 - - [10/Jan/2025:13:55:43 +0000] "GET /index.html HTTP/1.1" 500 32 192.168.1.100 - - [10/Jan/2025:13:55:44 +0000] "GET /about.html HTTP/1.1" 404 17 192.168.1.104 - - [10/Jan/2025:13:55:45 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.102 - - [10/Jan/2025:13:55:46 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.101 - - [10/Jan/2025:13:55:47 +0000] "GET /index.html HTTP/1.1" 500 32 192.168.1.100 - - [10/Jan/2025:13:55:48 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.103 - - [10/Jan/2025:13:55:49 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.105 - - [10/Jan/2025:13:55:50 +0000] "GET /index.html HTTP/1.1" 200 1234 192.168.1.100 - - [10/Jan/2025:13:55:51 +0000] "GET /index.html HTTP/1.1" 404 17 192.168.1.101 - - [10/Jan/2025:13:55:52 +0000] "GET /index.html HTTP/1.1" 500 32
grep -v '200' access.log
grep -v '200' access.log | wc -l
grep -v '200' access.log | cut -d' ' -f1 | sort | uniq -c
参考步骤:
grep -v '" 200 ' access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 5
9.(操作题)grep | awk 实战
场景:分析下面的内容,分别使用 grep 和 awk 找出ip地址
root@ubuntu24-13:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:54:43:3c brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 10.0.0.13/24 brd 10.0.0.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever
参考答案,没有标准答案,自己能够做出来即可
ip a | grep '/24' | tr -s ' '| cut -d' ' -f3 | cut -d'/' -f1
方法1 root@ubuntu24-13:~# ip a | tail -n2 | head -n1 | cut -d '/' -f1 | cut -d " " -f 6 10.0.0.13 方法2 root@ubuntu24-13:~# ip a | awk '/24/{print $2}' | cut -d '/' -f1 | cut -d " " -f 6 10.0.0.13 方法3 root@ubuntu24-13:~# ip a | grep 24 | cut -d '/' -f1 | cut -d " " -f 6 10.0.0.13
10.(操作题)awk 实战
假设有一个文本文件 students.txt
,内容如下:
Alice 90 Bob 85 Charlie 95 David 88 Eve 92
每一行的第一个字段是学生姓名,第二个字段是该学生的数学成绩。请使用 awk
完成以下两个任务:
-
打印出文件中所有学生的姓名和成绩信息,格式为 "姓名: 成绩"。
-
只打印出文件中第 3 行的学生姓名和成绩信息,同样按照 "姓名: 成绩" 的格式。
awk '{print "姓名:"$1,"成绩:"$2}' students.txt
awk 'NR==3{print "姓名:"$1,"成绩:"$2}' students.txt
参考答案
任务1: awk '{print $1 ": " $2}' students.txt 任务2: awk 'NR==3 {print $1 ": " $2}' students.txt