如何grep特殊字符,“^A”,^[,^[[

如何grep特殊字符,“^A”,^[,^[[

我知道如何使用 输出绑定键bindkey

我可以grep说一句话

$ bindkey | grep line
"^A" beginning-of-line
"^E" end-of-line
"^J" accept-line
"^K" kill-line
...

但我不能 grep^[G^[[A等等。

$ bindkey | grep ^[G
zsh: bad pattern: ^[G

我如何使用or等grep​​关键字?^[G^[[A

答案1

两个问题:shell 的特殊字符和正则表达式中的特殊字符。

开括号[在 shell 的文件名扩展模式中具有特殊含义,这就是 zsh 在该错误中所指的内容。您可以告诉它按字面意思加引号。单引号或双引号都可以,但单引号更好,它们的例外情况较少。

在正则表达式中,首字母^指示将模式锚定到行首,并且[具有与 shell 中类似的特殊含义。因此,您需要告诉grep将它们都视为文字,这是通过用反斜杠转义它们来完成的。

所以:

bindkey | grep '\^\[G'

请注意,^A输出中的bindkey是两个字符^(插入符号)和A(大写字母 A),而该组合在键绑定中代表的是 Ctrl-A,即数值为 1 的控制字符。对该字符的 Grepping 将为不同的。

答案2

使用-F选项和使用引号有效。

~ % bindkey | grep -F '^[G'
"^[G" get-line

-F, --fixed-strings 将 PATTERN 解释为固定字符串列表,以换行符分隔,其中任何一个都将被匹配。 (-F 由 POSIX 指定。)

答案3

如果您确实想获得控制字符,请使用十六进制代码。例如一个选项卡:

grep -P '\x09'

或者

grep -P '\t'

查找列表这里

相关内容