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

如何移除ddcutil输出中指定区间的无效显示内容?sed尝试失败求解决方案

解决ddcutil输出中移除无效显示器信息的方法

我之前处理过类似的需求,默认sed的逐行处理模式对付这种跨多行的区块删除确实不太顺手,不过只要用对sed的地址范围匹配或者换用awk,就能轻松搞定。

方法1:使用sed删除目标区块

直接用sed匹配从Invalid display开头的行到下一个空行的范围,然后删除这个区间的内容:

ddcutil detect --verbose | sed '/^Invalid display/,/^$/d'

命令解释:

  • /^Invalid display/,/^$/:定义了一个匹配范围,从以Invalid display开头的行,一直到第一个空行(^$表示空行)
  • d:删除这个范围内的所有行

如果你的无效区块结尾是包含空格或制表符的“空白行”(不是严格的空行),可以把空行匹配改成/^\s*$/(匹配零个或多个空白字符的行):

ddcutil detect --verbose | sed '/^Invalid display/,/^\s*$/d'

方法2:使用awk实现更直观的逻辑

awk的逐行处理逻辑更容易理解,我们可以通过标记变量来控制是否跳过行:

ddcutil detect --verbose | awk '
    /^Invalid display/ { skip = 1 }  # 遇到无效显示器开头,开启跳过标记
    /^$/ { skip = 0 }               # 遇到空行,关闭跳过标记
    !skip { print }                 # 没有跳过标记时,打印当前行
'

这个脚本的逻辑是:当检测到Invalid display开头的行,就开始跳过后续内容;直到遇到空行,恢复打印有效内容。

效果示例

假设原输出是:

Display 1
VCP version: 2.2
Controller: Dell

Invalid display
Invalid I2C bus: /dev/i2c-3
DDC/CI not supported

Display 2
VCP version: 2.1
Controller: LG

经过上面任意一个命令处理后,输出会变成:

Display 1
VCP version: 2.2
Controller: Dell

Display 2
VCP version: 2.1
Controller: LG

内容的提问来源于stack exchange,提问作者Galih Dono Prabowo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:18:00