2

在我已经匹配之后,我正在尝试找到一种方法来重新搜索另一个匹配的单词。

我特别想获得我的一台显示器的亮度值。例如 my 的一部分输出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

我想查找已连接的单词,然后获取单词 Brightness 的第一次出现。

我尝试过的工作如下:

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 行之后。所以我一直在寻找更强大的解决方案。

4

3 回答 3

2

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(for LVDS-1)时 - 立即打印值和exit脚本执行(以避免冗余迭代)

于 2017-05-27T20:08:04.647 回答
0

xrandr --verbose | awk '/connected/,0 { if( /Brightness:/ ) { print $2; exit } }'

范围结束表达式0被解释为,这意味着一旦范围开始模式 ( ) 匹配false,范围将尽可能地扩展。/connected/

于 2017-05-27T21:28:44.780 回答
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; } }'
于 2017-05-27T19:50:48.440 回答