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'

관련 정보