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'