grep 获取 ANSI 转义码

grep 获取 ANSI 转义码

我已经检查了很多关于如何单独转义字符或文字字符串的链接,grep但我就是无法将它们组合起来找到背景红色的 ANSI 转义序列^[41m,甚至键入^[+和两个文字字符+和同时使用和标志。Ctrl+VCtrl+[^[-E-F

我试图找到的原始字节由hexdump以下给出:

1b 5b 33 37 6d 1b 5b 34 31 6d 30 2e 30 30 25

其中这对应于WHITE FOREGROUND RED BACKGROUND 0.00%.我正在生成这些代码Python的colorama包并且Fore.WHITE+Back.RED,以防万一有人好奇。

那么,我缺少的秘密是什么?

答案1

但我就是无法让它们结合起来找到背景红色的 ANSI 转义序列^[41m

如果你用vim打开这个文件,你就会知道它不是^[41m,而是^[[41m, 哪个^[通过箭头键作为一组进行导航:

在此输入图像描述

1b逃脱由单个转义字符表示^[,可以通过Ctrl+V调用,后跟Esc^[看起来像 2 个字符,但其实不是,它是单个字符:

xb@dnxb:~/Downloads/grep$ ascii 1b
ASCII 1/11 is decimal 027, hex 1b, octal 033, bits 00011011: called ^[, ESC
Official name: Escape

xb@dnxb:~/Downloads/grep$

执行此操作(使用Ctrl+V后跟Esc创建^[,然后连续键入\[41m):

xb@dnxb:~/Downloads/grep$ hexdump -C /tmp/2
00000000  1b 5b 33 37 6d 1b 5b 34  31 6d 30 2e 30 30 25 0a  |.[37m.[41m0.00%.|
00000010
xb@dnxb:~/Downloads/grep$ \grep '^[\[41m' /tmp/2
0.00%
xb@dnxb:~/Downloads/grep$ \grep '^[\[41m' /tmp/2 | hexdump -C
00000000  1b 5b 33 37 6d 1b 5b 34  31 6d 30 2e 30 30 25 0a  |.[37m.[41m0.00%.|
00000010
xb@dnxb:~/Downloads/grep$ 

确保通过前缀转义 grep\以避免其别名--color影响:

在此输入图像描述

[选择]:

  1. \grep -P '\e\[41m'(来源:OP的评论)
  2. \grep '^[\[41m',使用Ctrl+V后接Ctrl+[来创建^[.当键盘中的退格键不是 0x08 时很有用,但我可以使用Ctrl+V后跟Ctrl+ H(^H get from ascii 08) 来生成它。

相关内容