ASCII 문자와 일치하지 않는 grep 문자열

ASCII 문자와 일치하지 않는 grep 문자열

활성 창을 다음 상위 작업 공간으로 이동한 다음 키에 할당하는 스크립트를 작성하려고 합니다. xdotool을 사용하여 활성 창을 찾은 다음 wmctrl을 사용하여 활성 창을 나열하고 grep을 사용하여 창 목록에서 활성 창을 찾아서 어떤 작업 공간에 있는지 확인하여 1씩 늘리고 창을 다음으로 이동하려고 합니다. 해당 작업공간(존재하는 경우)

보시다시피 이 값을 ACTWIND 변수 또는 값 0x5a00004(및 줄 시작 여부에 관계없이 작은 따옴표 또는 큰 따옴표의 변형)로 검색하면 행이 발견되지 않지만 동일한 줄을 검색하면 , 설립하다. 내 스크립트에서는 변수를 사용하거나 xdotool 호출에서 변수의 위치를 ​​바꿔 작업해야 합니다.

ACTWIND=$( printf 0x%x $(xdotool getactivewindow) )

$ echo “123 $ACTWIND 456”
123 0x5a00004 456

$ wmctrl -l
0x03600001 0 hpdv9917d Conky (hpdv9917d)
0x02800010 0 hpdv9917d YiPs Wiki (i powered) – Search – Mozilla Firefox
0x02800027 0 hpdv9917d Print all variables in a class? – Python – Stack Overflow – Mozilla Firefox
0x02800038 0 hpdv9917d (5) antiX (and MX) frugal installs (with grub entry) – YouTube – Mozilla Firefox
0x05a00004 0 hpdv9917d LXTerminal
0x02000002 0 hpdv9917d mrxvt-mini
0x02800043 0 hpdv9917d how to shift applications from workspace 1 to 2 using command – Ask Ubuntu – Mozilla Firefox
0x02600003 0 hpdv9917d *untitled – Geany
0x03200003 0 hpdv9917d antiX Control Center
0x03e00002 0 hpdv9917d alsamixer
0x01000008 0 hpdv9917d /home/bobc/Downloads/work

$ wmctrl -d
0 * DG: 1440×900 VP: 0,0 WA: 0,0 1440×875 N/A
1 – DG: 1440×900 VP: 0,0 WA: 0,0 1440×875 N/A

$ wmctrl -l | grep $ACTWIND

$ wmctrl -l | grep 0x5a00004

$ wmctrl -l | grep "0x5a00004"

$ wmctrl -l | grep '0x5a00004'

$ wmctrl -l | grep '^0x5a00004'

$ wmctrl -l | grep "^0x5a00004"

$ wmctrl -l | grep LXTerminal
0x05a00004  0 hpdv9917d LXTerminal

답변1

찾고 있는 문자열은 0x05a...대신 이어야 합니다 0x5a....

변수에 할당하는 방식을 다음과 같이 변경하고 싶을 수도 있습니다.

active_window=$( printf '0x%08x' "$( xdotool getactivewindow )" )

grep(정규식 일치 대신) 정확한 문자열 일치를 원할 경우 다음을 사용하십시오 -F.

grep -F '0x05a00004'

하지만 이 경우에는 줄 시작 부분에 표현식을 고정하고 싶을 수도 있습니다.

grep '^0x05a00004'

또는

grep "^$active_window"

아니면 어쩌면

awk -v str="$active_window" '$1 == str'

공백으로 구분된 첫 번째 필드에 대해 정확한 문자열 일치를 수행합니다.

관련 정보