如何基于电源类型标题,用正则/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
相关产品推荐
相关产品推荐

