xdotool
我从 shell得到以下输出:
Window 98566146
Position: 5,279 (screen: 0)
Geometry: 960x480
我希望它是:
x=5
y=279
width=960
height=480
使用 awk、sed 或其他工具。
澄清:我想xdotool search --sync --class mpv getwindowgeometry
通过 awk、sed 或其他工具使用正则表达式替换技术按照上述方式格式化输出。以下链接中有一个示例sed/awk 将特定模式替换为另一个模式。
例如
echo -e "Window 98566146\n Position: 5,279 (screen: 0)\n Geometry: 960x480\n" | awk ....
编辑2:
实际上我可以尝试以下 awk 行:
echo -e "Window 98566146\n Position: 5,279 (screen: 0)\n Geometry: 960x480\n" | awk -F'[:]' '{if (NR>1) print $2}'
答案1
$ awk -v RS= -F'[[:space:]:,x]+' '{printf "x=%d\ny=%d\nwidth=%d\nheight=%d\n", $4, $5, $9, $10}' file
x=5
y=279
width=960
height=480
答案2
您还可以使用这种有点基本的方法来完成此操作,使用tr
并依赖 shell 分词:
$ alias XDR='echo -e "Window 98566146\n Position: 5,279 (screen: 0)\n Geometry: 960x480\n"'
$ XDR | tr -dc '0-9 ,x' | tr ' ,x' ' '
返回
98566146 5 279 0 960 480
然后将其提供给 shell - 我建议使用 ( ) 来保护当前环境:
$ (set $(XDR | tr -dc '0-9 ,x' | tr ' ,x' ' ') &&\
echo -e "x=$2\ny=$3\nwidth=$5\nheight=$6")
或者在 bash 中,使用进程替换将其直接拉入变量中:
$ read wid x y scr width height < <(XDR | tr -dc '0-9 ,x' | tr ' ,x' ' ')
$ echo -e "x=$x\ny=$y\nwidth=$width\nheight=$height"
更新- 以下同样有效:
$ XDR | tr -c '0-9' ' '
答案3
有很多方法可以做到这一点。这是一个非常基本的方法:
$ awk -F'[:,x]' '/Position:/ { sub(" .*","",$3); printf "x=%i\ny=%s\n", $2,$3};
/Geometry:/ { printf "width=%i\nheight=%i\n", $2, $3}' xdotool.txt
x=5
y=279
width=960
height=480
它使用冒号、逗号或 anx
作为字段分隔符。它还用于sub()
从 Position: 行的 y 值 ($3) 中删除空格字符及其后面的所有内容。
xdotool.txt
是一个文本文件,其中包含示例 xdotool 输出。
答案4
GNU sed
使用和进行测试busybox sed
:
sed -nEe 's/^[[:space:]]+Position: ([[:digit:]]+),([[:digit:]]+) \(screen: 0\)$/x=\1\ny=\2/p' -e 's/^[[:space:]]+Geometry: ([[:digit:]]+)x([[:digit:]]+)$/width=\1\nheight=\2/p'