如何在Bash中解析命令彩色输出?筛选已连接显示器条目
筛选kscreen-doctor输出中已连接的显示设备
在Bash环境执行以下命令后:
kscreen-doctor --outputs | grep connected
得到的输出包含已连接和未连接的设备行,但尝试多种带前导空格的grep变体(如grep " connected"、grep "\sconnected"等)均无法仅保留已连接设备。
可行解决方法
方法1:排除含"disconnected"的行
利用grep -v反向排除未连接的行:
kscreen-doctor --outputs | grep connected | grep -v disconnected
先抓取所有含"connected"的行,再排除包含"disconnected"的行,剩余即为已连接设备的信息。
方法2:精准匹配已连接行的特征
已连接设备行包含enabled connected的固定组合,直接匹配该字符串:
kscreen-doctor --outputs | grep "enabled connected"
若担心空白字符数量问题,用扩展正则匹配任意空白字符:
kscreen-doctor --outputs | grep -E 'enabled\s+connected'
-E启用扩展正则,\s+匹配一个或多个空白字符,避免因多空格导致匹配失败。
方法3:用awk按字段筛选
awk按空格分割字段,直接判断第4个字段是否为"connected":
kscreen-doctor --outputs | awk '$4 == "connected"'
这种方式更精准,不受空白字符数量影响。
原命令失败原因
- 输出中的空白字符可能是多个空格或制表符,单空格匹配无法命中;
- 基础grep不支持
\s正则,需加-E启用扩展正则,或用[[:space:]]代替\s。
内容的提问来源于stack exchange,提问作者AaronD
相关产品推荐
相关产品推荐

