我正在尝试找到一种方法来搜索我已经有匹配后的另一个匹配单词。
我专门试图获得我的一台监视器的亮度价值。例如,我的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}'
按预期工作,为我提供了此特定监视器的亮度值。
,但我不确定亮度值是否总是在5行上。所以我正在寻找一个更强大的解决方案。
awk 解决方案:
xrandr --verbose | awk '/LVDS-1/{f=1}/Brightness:/ && f{print $2; exit}'
/LVDS-1/{f=1}
-遇到所需的LVDS-1
set flagf=1
/Brightness:/ && f
-遇到使用Brightness:
的最接近行和Active Flagf
(对于LVDS-1
(时 - 打印值,exit
立即执行脚本(避免冗余迭代(
如果我理解正确,您想打印特定监视器的亮度。假设那是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; } }'
xrandr --verbose | awk '/connected/,0 { if( /Brightness:/ ) { print $2; exit } }'
范围表达式0
被解释为false
,这意味着一旦启动范围的模式(/connected/
(匹配范围。