grep 不匹配 ascii 字符的字符串

grep 不匹配 ascii 字符的字符串

我正在尝试编写一个脚本,将活动窗口移动到下一个更高的工作区,然后我将其分配给一个键。我使用 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'

与第一个空格分隔的字段进行精确的字符串匹配。

相关内容