以下是50个实用的awksedgrep实战题目,涵盖文本处理、日志分析、数据提取等常见场景:


一、grep 实战题(15个)

  1. 查找包含”error”的行

    grep "error" logfile
  2. 忽略大小写搜索”warning”

    grep -i "warning" file.txt
  3. 统计匹配”success”的行数

    grep -c "success" data.log
  4. 显示不包含”debug”的行

    grep -v "debug" app.log
  5. 递归搜索目录下所有Python文件中的”import”

    grep -r "import" --include="*.py" /path/
  6. 匹配IPv4地址

    grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
  7. 查找空行并显示行号

    grep -n "^$" file.txt
  8. 匹配以”#”开头的注释行

    grep "^#" config.conf
  9. 查找包含数字的行

    grep "[0-9]" data.txt
  10. 匹配精确单词”fail”(非子串)

    grep -w "fail" logfile
  11. 显示匹配行及其后2行

    grep -A 2 "panic" system.log
  12. 匹配邮箱地址

    grep -Eo "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" contacts.txt
  13. 查找2023年的日志条目

    grep "2023-" server.log
  14. 统计所有Java文件中”public”的出现次数

    grep -ro "public" --include="*.java" . | wc -l
  15. 静默检查是否存在”ready”标记

    grep -q "ready" status.txt && echo "Found"

二、sed 实战题(15个)

  1. 替换所有”foo”为”bar”

    sed 's/foo/bar/g' file.txt
  2. 删除空行

    sed '/^$/d' input.txt
  3. 替换每行第2个”cat”为”dog”

    sed 's/cat/dog/2' pets.txt
  4. 删除1-5行

    sed '1,5d' data.txt
  5. 在行首添加注释符”# “

    sed 's/^/# /' config.conf
  6. 删除HTML标签

    sed 's/<[^>]*>//g' page.html
  7. 替换冒号分隔文件的第3列

    sed 's/\([^:]*:[^:]*:\).*/\1new_value/' passwd.txt
  8. 在匹配行后插入新行

    sed '/pattern/a\new line' file
  9. 将DOS换行符(CRLF)转为Unix格式(LF)

    sed 's/\r$//' dosfile.txt > unixfile.txt
  10. 仅打印第10-20行

    sed -n '10,20p' log.txt
  11. 原地修改文件(备份原文件)

    sed -i.bak 's/old/new/g' file.txt
  12. 将多行合并为一行(用空格分隔)

    sed ':a;N;$!ba;s/\n/ /g' multiline.txt
  13. 删除行尾空格

    sed 's/[[:space:]]*$//' file.txt
  14. 将大写字母转换为小写

    sed 's/[A-Z]/\L&/g' mixed.txt
  15. 提取两个标记之间的内容

    sed -n '/START/,/END/p' data.txt

三、awk 实战题(20个)

  1. 打印文件第1列和第3列

    awk '{print $1, $3}' table.csv
  2. 统计文件行数

    awk 'END{print NR}' data.txt
  3. 计算第2列的总和

    awk '{sum+=$2} END{print sum}' numbers.txt
  4. 打印长度大于80字符的行

    awk 'length($0) > 80' longlines.txt
  5. 处理冒号分隔文件(如/etc/passwd)

    awk -F: '{print $1, $6}' /etc/passwd
  6. 求第3列的平均值

    awk '{sum+=$3} END{print sum/NR}' data.txt
  7. 过滤第2列大于100的行

    awk '$2 > 100' sales.txt
  8. 去重显示第1列

    awk '!seen[$1]++{print $1}' duplicates.txt
  9. 打印行号及内容

    awk '{print NR, $0}' file.txt
  10. 反转字段顺序

    awk '{for(i=NF;i>=1;i--) printf "%s ",$i; print ""}' words.txt
  11. 统计IP访问次数(Nginx日志)

    awk '{ip[$1]++} END{for(i in ip) print i, ip[i]}' access.log
  12. 提取JSON中的特定字段

    awk -F'"' '/"name":/{print $4}' data.json
  13. 合并多个文件并添加文件名前缀

    awk '{print FILENAME, $0}' file1.txt file2.txt
  14. 条件格式化输出

    awk '{printf "Name: %-10s Score: %5d\n", $1, $2}' grades.txt
  15. 处理CSV文件(跳过标题行)

    awk -F, 'NR>1{print $2}' data.csv
  16. 按第3列数值降序排序

    awk '{print $0}' data.txt | sort -nk3
  17. 分组统计(按第1列分组求和)

    awk '{sum[$1]+=$3} END{for(i in sum) print i, sum[i]}' sales.txt
  18. 计算文件MD5校验和

    awk '{content=content $0} END{print content | "md5sum"}' file.txt
  19. 提取两个时间戳之间的日志

    awk '/2023-01-01 10:00/,/2023-01-01 11:00/' server.log
  20. 复杂条件处理(嵌套if)

    awk '{if($2>90) grade="A"; else if($2>80) grade="B"; else grade="C"; print $1, grade}' scores.txt

四、综合挑战题(附加5个)

  1. 提取Nginx日志中状态码为404的URL

    awk '$9==404{print $7}' access.log | sort | uniq -c
  2. 批量重命名文件(添加前缀)

    ls | awk '{print "mv "$0" prefix_"$0}' | bash
  3. 删除配置文件中的重复行(保留顺序)

    awk '!seen[$0]++' config.conf
  4. 统计Java方法的行数

    sed -n '/public.*void/,/^}/p' Class.java | wc -l
  5. 分析磁盘空间占用(过滤大于1GB的目录)

    du -sk * | awk '$1>1048576{print $2}'

这些题目覆盖了文本处理的常见需求,建议逐步练习以掌握三剑客的强大功能!

作者:admin  创建时间:2025-05-29 09:58
最后编辑:admin  更新时间:2025-05-29 13:26