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

如何基于电源类型标题,用正则/grep获取displaysleep对应值?

解决pmset指定电源类型获取displaysleep值的层级式方法

针对pmset -g custom的分区块输出,推荐用基于区块层级的文本处理工具来精准获取指定电源类型的displaysleep值,比跨行非贪婪匹配更可靠,以下是几种实用方案:

1. AWK 区块定位法(最优)

利用AWK的标记变量锁定目标电源区块,再在区块内提取displaysleep的值,自动识别区块边界,不受配置项顺序影响。

获取AC Power的displaysleep值:

pmset -g custom | awk '/^AC Power$/{flag=1; next} /^[^ \t]/{flag=0} flag && /displaysleep/{print $2}'

获取Battery Power的displaysleep值:

pmset -g custom | awk '/^Battery Power$/{flag=1; next} /^[^ \t]/{flag=0} flag && /displaysleep/{print $2}'

逻辑说明:

  • /^AC Power$/ 匹配目标电源区块的标题行,设置标记flag=1
  • /^[^ \t]/{flag=0} 匹配下一个非空白开头的行(即下一个区块标题),关闭标记
  • 当flag=1(处于目标区块内)时,匹配displaysleep行并输出第二个字段(即数值)

2. Sed 区块范围匹配法

同样基于区块层级,用Sed的范围匹配语法定位目标区块,再提取目标值:

# AC Power示例
pmset -g custom | sed -n '/^AC Power$/,/^[^ \t]/{/displaysleep/s/.* //p}'

逻辑说明:

  • /^AC Power$/,/^[^ \t]/ 定义从AC Power标题到下一个区块标题的范围
  • 在该范围内匹配displaysleep行,替换掉前面的文本后输出数值

为什么层级式方法优于跨行非贪婪匹配?

跨行非贪婪匹配依赖正则的模糊匹配,容易因换行、空格或配置项位置变化出现误匹配;而层级式方法直接贴合pmset输出的区块结构,先锁定目标电源的配置区块,再在区块内查找目标项,逻辑更清晰,可靠性更高,完全不受配置项顺序变动的影响。

内容的提问来源于stack exchange,提问作者d-b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:47:10