BusyBox 中文文档 下载 App

BusyBox 文本处理 grep sed awk 的简化实现

文本三剑客对比

BusyBox 提供了 grep、sed、awk 的精简实现,行为与 GNU 原版基本兼容,但砍掉了一些高级特性:

工具BusyBox 版GNU 版体积
grep基础正则 + 扩展正则基础/扩展/PCRE 三种模式~40KB
sed基础替换/删除/插入完整 POSIX + 很多扩展命令~50KB
awkmawk 简化版gawk(完整 AWK 语言)~80KB

grep 常用模式

BusyBox grep 覆盖了最常用的场景:

# 基础字符串搜索
busybox grep "pattern" file.txt

# 忽略大小写
busybox grep -i "pattern" file.txt

# 显示匹配行的行号
busybox grep -n "pattern" file.txt

# 只显示匹配的文件名
busybox grep -l "pattern" *.txt

# 反向匹配(不包含 pattern 的行)
busybox grep -v "pattern" file.txt

# 正则匹配(扩展正则用 -E)
busybox grep -E "^[0-9]+" file.txt

# 搜索并替换(用 xargs + sed 组合)
busybox grep -rl "old" /path | busybox xargs busybox sed -i 's/old/new/g'

BusyBox grep 不支持:

sed 替换和删除

sed 是 BusyBox 文本处理中变化最小的工具之一:

# 基本替换
busybox sed 's/old/new/g' file.txt

# 只替换第一个匹配
busybox sed 's/old/new/' file.txt

# 在行首添加内容
busybox sed 's/^/prefix /' file.txt

# 在行尾添加内容
busybox sed 's/$/ suffix/' file.txt

# 删除匹配行
busybox sed '/pattern/d' file.txt

# 原地修改(某些版本需要显式 -i 参数)
busybox sed -i 's/old/new/g' config.conf

BusyBox sed 不支持:

awk 数值和字段处理

BusyBox awk(基于 mawk 的简化版)足够做数值计算和字段处理:

# 提取第 N 列(默认分隔符是空白)
busybox awk '{print $2}' data.txt

# 自定义分隔符
busybox awk -F: '{print $1}' /etc/passwd

# 条件过滤
busybox awk '$3 > 100 {print $1, $3}' data.txt

# 数值计算
busybox awk '{sum += $2} END {print "Total:", sum}' data.txt

# 多文件处理
busybox awk '{count[$1]++} END {for (k in count) print k, count[k]}' file1 file2

BusyBox awk 不支持:

实用替代技巧

在 BusyBox 环境里遇到文本处理高级需求时,几个常用替代思路:

grep -A/-B 没有:用 awk 实现上下文行

# 等价于 grep -A 2 -B 2 "pattern" file
busybox awk 'c > 0 {print; c--} /pattern/ {print; c = 2}' file

sed 复杂替换没有:用 perl(如果系统装了)或 python,或者在主机上处理好文件再传到设备。BusyBox 环境装 perl 代价很大(几百 KB),一般不值得。

awk 用户函数没有:把重复逻辑提取成 Shell 函数,逐行处理:

#!/bin/sh
process_line() {
  echo "$1" | busybox awk -F: '{print $1}'
}

while IFS= read -r line; do
  process_line "$line"
done < data.txt