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'