我正在阅读这篇文章。那里有一个声明:
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
我的纯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)
你也许可以使用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)
希望这有帮助。