我正在尝试找到一种方法,在已有匹配项后重新搜索另一个匹配的单词。
我特别想获取我的一台显示器的亮度值。例如,我的 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
我想查找“connected”一词,然后获取第一次出现的“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 行之后。 所以我一直在寻找更强大的解决方案。
最佳答案
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
) - 打印值并立即退出
脚本执行(以避免冗余迭代)
关于regex - 使用 awk 匹配一个单词,然后找到另一个单词第一次出现的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44220931/