xdotool 窗口几何的格式输出

xdotool 窗口几何的格式输出

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'

相关内容