regex - 使用 awk 匹配一个单词,然后找到另一个单词第一次出现的位置

标签 regex linux awk sed xrandr

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

我特别想获取我的一台显示器的亮度值。例如,我的 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/

相关文章:

javascript - 如何使用 javascript 正则表达式进行清理 - 不区分大小写 + 空格 + 整个单词

ruby-on-rails - Ruby .scan 方法使用正则表达式返回空

javascript - 正则表达式 - "Nothing to repeat"

Linux命令从一个长字符串中打印一些字符

awk 反转行和单词

ruby - 当我要求它匹配数字时,为什么扫描匹配 ""个字符?

linux - 未找到 'modules.conf',不会加载任何模块

c++ - 在同一程序中使用 Linux C++ 共享库和静态库

linux - Bamboo :错误:找不到或加载主类 org.apache.tools.ant.launch.Launcher

linux - 对具有不均匀字段的行进行排序