我试图找到一种方法,在我已经匹配后重新搜索另一个匹配的单词。
我特意尝试获取其中一台显示器的亮度值。例如,我的xrandr --verbose
输出的一部分如下:
DP-1 connected 1920x1080+1920+0 (0x6e) normal (normal left inverted right x axis y axis) 598mm x 336mm
Identifier: 0x46
Timestamp: 73906594
Subpixel: horizontal rgb
Gamma: 1.0:1.0:1.0
Brightness: 1.0
Clones:
CRTC: 1
我想查找连接词,然后第一次出现“亮度”这个词。
我尝试过的是以下内容:
xrandr --verbose | awk '/ connected /{print $1}/Brightness:/{print $2}'
这给了我以下输出,因为我有两个监视器:
LVDS-1
1.0
DP-1
1.0
但假设我只希望第一次出现结果,我试过这个:
xrandr --verbose | awk '/LVDS-1/{getline; getline; getline; getline; getline; print$0}'
按预期工作,为我提供此特定显示器的亮度值。
但我不确定Brightness值是否总是在5行之后。 所以我一直在寻找更强大的解决方案。
答案 0 :(得分:1)
awk 解决方案:
xrandr --verbose | awk '/LVDS-1/{f=1}/Brightness:/ && f{print $2; exit}'
/LVDS-1/{f=1}
- 遇到需要LVDS-1
设置标记的行f=1
/Brightness:/ && f
- 遇到与Brightness:
和有效标记f
(对于LVDS-1
)最近的行时 - 打印值exit
脚本立即执行(以避免冗余迭代)
答案 1 :(得分:0)
如果我理解正确,您想要打印特定显示器的亮度。我们假设它是LVDS-1
。然后你可以使用一个变量来检查你是否在正确的"部分" xrandr
输出和代码如下:
xrandr --verbose | awk '/ connected / { if ( $1 == "LVDS-1" ) { print $1; print_brightness = 1; } } /Brightness: / { if (print_brightness) { print $2; print_brightness = 0; } }'
答案 2 :(得分:0)
xrandr --verbose | awk '/connected/,0 { if( /Brightness:/ ) { print $2; exit } }'
范围结束表达式0
被解释为false
,这意味着一旦范围开始模式(/connected/
,范围将尽可能地扩展)匹配。