linux初级_三剑客笔记(grep,sed,awk)

TJCcc 发布于 2025-12-28 64 次阅读


1. 三剑客简介与区别

工具核心作用记忆口诀适用场景
grep过滤过滤查找快速查找包含特定字符串或符合正则的行。
sed修改/替换取行、修改文本文件的增删改查,特别是批量替换。
awk取列/统计取列、计算格式化输出,处理结构化数据(如日志、CSV)。

2. grep:文本过滤专家

作用:模糊过滤文件内容,类似于“查找”。
就i

2.1 常用参数详解

参数含义备注
-v取反排除匹配的行 (Invert match)。
-r递归过滤目录及子目录下所有文件的内容。
-i忽略大小写不区分大小写匹配 (Ignore case)。
-w精确匹配按单词匹配,避免匹配到子串 (Word)。
-o仅显示匹配过程只输出匹配到的部分,而不是整行。
-E支持扩展正则等同于 egrep,支持 +, ?, |, () 等。
-n显示行号输出匹配行的行号 (Line number)。
-c统计次数统计匹配到的行数 (Count)。
-A nAfter显示匹配行及其后 n 行。
-B nBefore显示匹配行及其前 n 行。
-C nContext显示匹配行及其前后各 n 行。

2.2 实战案例

  1. 递归查找:查找当前目录及子目录下所有包含 "www.baidu.com" 的文件。
    bash grep -r 'www.baidu.com' . # 或者配合 find 使用 find ./ -type f | xargs grep 'www.baidu.com'
  2. 统计出现次数:统计日志中出现 "Failed" 的总次数。
    bash grep -c "Failed" /var/log/secure

3. sed:流编辑器 (Stream Editor)

作用:主要用于对文件进行增、删、改、查,特别是按处理和文本替换

3.1 核心语法

sed [选项] '模式 动作' 文件
sed [选项] '找谁 干啥' 文件
  • 常用选项
    • -n: 取消默认输出(默认 sed 会输出所有行,配合 p 动作使用)。
    • -i: 直接修改源文件 (Dangerous! 慎用)。
    • -r: 支持扩展正则表达式

3.2 常见动作 (Action)

动作含义示例
p打印 (Print)sed -n '3p' (打印第3行)
d删除 (Delete)sed '3d' (删除第3行)
s替换 (Substitute)sed 's#old#new#g' (替换)
i插入 (Insert)sed '3i content' (在第3行插入)
a追加 (Append)sed '3a content' (在第3行追加)
c整行替换 (Change)sed '3c content' (将第3行整行替换)
w保存 (Write)sed '3w new.txt' (将第3行写入新文件)

3.3 实战案例

3.3.1 查找 (p)

  • 指定行sed -n '3p' file (第3行), sed -n '2,4p' file (第2到4行)。
  • 正则过滤sed -n '/root/p' file (包含root的行)。
  • 区间过滤sed -n '/start/,/end/p' file (匹配从 start 到 end 之间的所有行,常用于按时间截取日志)。

3.3.2 删除 (d)

  • 删除行sed '3d' file (删第3行), sed '2,$d' file (删第2行到最后)。
  • 过滤删除sed '/root/d' file (删除包含root的行)。
  • 排除空行和注释sed -r '/^$|^#/d' config_file

3.3.3 替换 (s)

  • 基本格式sed 's#原内容#新内容#g' (g 代表全局替换,否则只替第一个)。
  • 后向引用 (高级):使用 () 分组,用 \1, \2 引用。
    • 案例:提取网卡IP
      bash ifconfig eth0 | sed -n '2p' | sed -r 's#^.*t (.*) netm.*$#\1#g'
    • 案例:批量生成用户命令
      bash echo test{1..3} | xargs -n1 | sed -r 's#(.*)#useradd \1#g' | bash

4. awk:文本分析工具

作用:一门编程语言,擅长取列格式化输出统计计算

4.1 核心语法

awk [选项] '模式 {动作}' 文件
  • 默认行为:如果不写动作,默认输出整行。
  • 常用选项
    • -F: 指定分隔符(默认为空格或Tab)。支持多分隔符,如 -F "[:/]+"

4.2 内置变量

变量含义
$0整行内容
$1$n第1列 … 第n列。
NF最后一列的列号 (Number of Fields)。
$NF最后一列的内容
$(NF-1)倒数第二列。
NR行号 (Number of Records)。

4.3 实战案例

4.3.1 取行 (NR)

  • 指定行awk 'NR==3' file (第3行)。
  • 范围awk 'NR>2 && NR<5' file (第3到4行)。
  • 逻辑运算&& (并且), || (或者), != (不等于)。

4.3.2 取列 ($n)

  • 指定列awk '{print $1, $3}' file (打印第1和第3列)。
  • 指定分隔符
    bash awk -F: '{print $1, $NF}' /etc/passwd
  • 自定义输出awk '{print $1 "----" $3}' file (拼接字符串)。

4.3.3 模式匹配 (正则 & 比较)

  • 正则匹配
    • awk '/root/' file (整行包含root)。
    • awk '$2 ~ /^o/' file (第2列以 'o' 开头)。
  • 数值比较
    • awk '$3 > 500' file (第3列数值大于500)。
    • 案例:统计成绩
      bash # 统计分数在80到90之间的人数 awk '$2>=80 && $2<90' scores.txt | wc -l

4.3.4 混合实战

  • 提取磁盘利用率
    bash df -h | awk '/\/$/{print $5}' # 匹配以 / 结尾的行,打印第5列

5. 总结

功能命令选择示例
找文件内容grepgrep "error" log.txt
替换文件内容sedsed -i 's#A#B#g' file
取某一列awkawk '{print $1}' file
取某一行sed / awksed -n '5p'awk 'NR==5'
范围截取sedsed -n '/Start/,/End/p' file

学习建议

  1. 正则(Regular Expression)是三剑客的灵魂,务必熟练掌握。
  2. grep 用得最多,sed 适合脚本修改配置,awk 适合数据分析和报表。
唯有极致沉淀,才能造就辉煌。
最后更新于 2025-12-28