只获取我的屏幕的 H+W 几何图形,而没有后来的 +x+y

Gue*_*ABC 9 command-line awk

我正在阅读这篇文章。那里有一个声明:

ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 25 -i :0.0 -sameq -f mpeg -ar 48000 -s wvga -y sample.mp4 
Run Code Online (Sandbox Code Playgroud)

当我运行命令时,出现以下部分的错误:

xwininfo -root | grep 'geometry' | awk '{print $2;}' 
Run Code Online (Sandbox Code Playgroud)

原因是当你在我的电脑上使用这个命令时,它输出:

1360x768+0+0 
Run Code Online (Sandbox Code Playgroud)

如何删除屏幕分辨率输出的最后一部分1360x768而不是1360x768+0+0

Syl*_*eau 10

  • 您可以使用perl仅获取分辨率:

    xwininfo -root | perl -lne 's/.*geometry (\w+).*/$1/ or next; print'
    1360x768
    
    Run Code Online (Sandbox Code Playgroud)
  • 甚至更短的 GNU grep

    xwininfo -root | grep -oP '(?<=geometry )\w+'
    1360x768
    
    Run Code Online (Sandbox Code Playgroud)

    说明:lookbehind(?<=geometry )断言在字符串中的当前位置,前面是字符“geometry”。如果断言成功,引擎将匹配解析模式。

    后视不会“消耗”字符串上的任何字符。这意味着在右括号之后,正则表达式引擎仍然站在它开始查找的字符串中的同一个位置:它没有移动。从那个位置,引擎可以再次开始匹配字符。

    来源:http : //www.rexegg.com/regex-disambiguation.html#lookbehind


Oli*_*Oli 6

我的纯awk方法,将字符串拆分为基于空格和加号的字段:

xwininfo -root | awk -F'[+| ]' '/geometry/ {print $4}'
Run Code Online (Sandbox Code Playgroud)

与 Sylvain 的 Perl 表达式类似的方法,但具有sed

xwininfo -root | sed -nr 's/.*geometry ([0-9x]+).*/\1/p'
Run Code Online (Sandbox Code Playgroud)


Rel*_*lic 5

你也许可以使用awk substr. 在您的特定情况下:

xwininfo -root | awk '/geometry/ {print substr($2,1,8);}'
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望它在任何情况下都能正常工作:

xwininfo -root | awk '/geometry/ {print $2;}' | cut -d'+' -f1
Run Code Online (Sandbox Code Playgroud)

希望这有帮助。

  • 您应该使用 sylvain 的答案。它更好。 (2认同)