저는 위치와 측면에 따라 창을 관리하기 위해 Linux에서 스크립트를 작성하고 있습니다. xwininfo -id ID -all
특히 최대화 및 전체 화면인 경우 창 정보를 표시하는 데 사용하는 것은 다음과 같은 결과를 반환합니다.
xwininfo: Window id: 0x2200001 "Newest 'bash' Questions - Unix & Linux Stack Exchange - Google Chrome"
[......]
Window manager hints:
Client accepts input or input focus: Yes
Initial state is Normal State
Displayed on desktop 0
Window type:
Normal
Window state:
Maximized Horz
Maximized Vert
Fullscreen
Focused
Process id: 63354 on host antonio-ThinkPad
Normal window size hints:
Program supplied minimum size: 121 by 127
[.......]
예를 들어 개별 줄을 잃지 않고 Window manager hints:
과 Normal window size hints
(독점) 사이의 모든 것을 추출하여 이름이 지정된 변수에 저장하고 싶습니다 . $info
나는 그것을 시도했지만 awk
성공 sed
하지 못했습니다. 저는 전문 프로그래머가 아니므로 미리 감사드립니다 :)
제안된 예상 출력:
Client accepts input or input focus: Yes
Initial state is Normal State
Displayed on desktop 0
Window type:
Normal
Window state:
Maximized Horz
Maximized Vert
Fullscreen
Focused
아니요, 다른 곳에서는 나타나지 않습니다.
답변1
그러면 사이에 있는 두 줄을 제외하고 두 줄이 인쇄됩니다.
awk '/Window manager hints:/{flag=1; next} /Normal window size hints/{flag=0} flag' file.txt
산출:
Displayed on desktop 0
Window type:
Normal
Window state:
Maximized Horz
Maximized Vert
[.......]
여기에는 두 줄이 포함됩니다.
awk '/Window manager hints:/,/Normal window size hints/' file.txt
산출:
Window manager hints:
Displayed on desktop 0
Window type:
Normal
Window state:
Maximized Horz
Maximized Vert
[.......]
위 명령은 파일에 대해 실행되지만 다음 명령을 통해 파이프할 수도 있습니다.
xwininfo -id ID -all | awk '/Window manager hints:/{flag=1; next} /Normal window size hints/{flag=0} flag'
또는
xwininfo -id ID -all | '/Window manager hints:/,/Normal window size hints/'
답변2
다음을 시도해 볼 수 있습니다.
xwininfo -id ID -all | awk -v RS="" '/^ *Window manager hints/{sub(/^[^\n]*\n/,"");print}'
관련 블록을 추출합니다. 이는 awk
각 "빈 줄로 구분된" 블록이 하나의 레코드로 처리되는 "단락 모드" 에서 사용됩니다 . 그런 다음 레코드가 앞에 공백이 올 수 있는 "창 관리자 프롬프트"로 시작하는지 확인하면 됩니다. 그렇다면 첫 번째 줄을 제거하고 관심 있는 텍스트 블록이 될 레코드를 인쇄합니다.
이를 쉘 스크립트에서 사용하고 출력을 쉘 변수로 가져오려면 다음과 같이 "명령 대체"에 배치하십시오.
info="$(xwininfo -id ID -all | awk -v RS="" '/^ *Window manager hints/{sub(/^[^\n]*\n/,"");print}')"
이렇게 하면 "올바른 변수 참조(TM)"로 인해 줄 바꿈을 포함한 전체 구조가 보존됩니다.