You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本从i2cdetect输出中提取I2C地址

从i2cdetect输出中提取I2C地址的实用方法

Hey there! 从VxWorks转Linux还能这么快上手,必须给你点个赞😉。针对你要从i2cdetect输出里提取I2C地址(包括UU这种标记)的需求,我给你整理几个用sed、awk和grep实现的方案,都是日常运维里常用的:

方法1:用grep直接匹配(最简洁)

grep的-o选项可以只输出匹配到的内容,结合正则表达式就能精准抓出我们要的地址:

i2cdetect -y -r 3 | grep -oE '[0-9a-f]{2}|UU'
  • 解释:[0-9a-f]{2}匹配两位十六进制地址,|UU同时匹配标记为UU的设备;-E启用扩展正则,-o只输出匹配片段。
  • 如果只想提取纯十六进制地址(排除UU),把正则改成[0-9a-f]{2}即可。

方法2:用awk处理结构化输出

awk擅长处理表格类文本,刚好适配i2cdetect的行列输出:

i2cdetect -y -r 3 | awk '{
    for(i=2; i<=NF; i++) {  # 跳过每行开头的"xx:"字段
        if($i != "--") {    # 过滤掉空地址标记"--"
            print $i
        }
    }
}'
  • 解释:NF代表当前行的总字段数,从第2个字段开始遍历,只要不是--就打印,完美提取所有有效地址。

方法3:用sed做文本替换后拆分

如果偏好sed,可以通过替换和拆分来实现:

i2cdetect -y -r 3 | sed -n '
    s/^[0-9a-f][0-9a-f]: //;  # 删除每行开头的地址段标记(比如"00:")
    s/ -- / /g;                # 把所有空地址"--"替换成空格
    s/^ *//; s/ *$//;          # 去掉行首尾的空格
    p' | tr ' ' '\n' | grep -v '^$'  # 把空格换成换行,过滤空行
  • 这个步骤稍多胜在直观,适合理解文本处理的逻辑。

以上几种方法都能满足你的需求,选最顺手的用就行~

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:12:47