xdotoolウィンドウジオメトリの出力形式

xdotoolウィンドウジオメトリの出力形式

xdotoolシェルから次の出力を取得します。

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シェルトークン化を使用して依存するかなり基本的な方法でこれを実行することもできます。

$ 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

次にそれをシェルに供給します。現在の環境を保護するには()を使用することをお勧めします。

$ (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

xコロン、カンマ、またはフィールド区切り文字を使用します。また、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'

関連情報