在我的 Gentoo 系统上,find . -regextype help
输出
find: Unknown regular expression type ‘help’; valid types are ‘findutils-default’, ‘awk’, ‘egrep’, ‘ed’, ‘emacs’, ‘gnu-awk’, ‘grep’, ‘posix-awk’, ‘posix-basic’, ‘posix-egrep’, ‘posix-extended’, ‘posix-minimal-basic’, ‘sed’.
我一直以为智能引号(或无论它们叫什么)是微软软件的祸害,事实证明没有人能免受这种丑陋的影响。在我的另一个系统(Cygwin)上,LANG
设置为en_US.UTF-8
,并且智能引号也会显示。如果我取消设置LANG
或将其设置为en.UTF-8
,输出将更改为常规单引号:
# unset LANG
# find -regextype help
find: Unknown regular expression type 'help'; valid types are 'findutils-default', 'awk', 'egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-eg
rep', 'posix-extended', 'posix-minimal-basic', 'sed'.
但在前面提到的 Gentoo 系统上,LANG 未设置。无论我尝试将其(和其他语言环境变量)设置为多少,我都会看到智能引号和/或一堆有关语言环境不正确的错误消息。
如何恢复我的单引号?
答案1
这是不是由智能引号系统自动转换。该文本是 GNU 的直接输出find
。一些系统范围的智能引号解释器只会影响来自键盘的输入……我从未听说过 GNU/Linux/BSD 的智能引号解释器(我找到这篇文章是因为我在寻找如何英文能够做到!
这是命令输出的十六进制转储:
$ find . -regextype help 2>&1 |head -c99
find: Unknown regular expression type ‘help’; valid types are
‘findutils-default’, ‘ed’
$ find . -regextype help 2>&1 |head -c99 |hd
00000000 66 69 6e 64 3a 20 55 6e 6b 6e 6f 77 6e 20 72 65 |find: Unknown re|
00000010 67 75 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e |gular expression|
00000020 20 74 79 70 65 20 e2 80 98 68 65 6c 70 e2 80 99 | type ...help...|
00000030 3b 20 76 61 6c 69 64 20 74 79 70 65 73 20 61 72 |; valid types ar|
00000040 65 20 e2 80 98 66 69 6e 64 75 74 69 6c 73 2d 64 |e ...findutils-d|
00000050 65 66 61 75 6c 74 e2 80 99 2c 20 e2 80 98 65 64 |efault..., ...ed|
00000060 e2 80 99 |...|
这样可以更容易地看到输出使用了显式的左、右单引号行进字符(分别为 U+2018 和 U+2019,请参阅此Unicode 代码点表)。在 UTF-8 中,它们表示为e2 80 98
和,这就是为什么您会在(其本身)和其他引用的单词e2 80 99
两侧看到三个点(表示非 ASCII 字符) 。help
68 56 5c 70
因此,您可以使用以下方法将其转换回来sed
:
$ find . -regextype help 2>&1 |head -c99 \
|sed "s/\xe2\x80\x98/'/g; s/\xe2\x80\x99/'/g"
find: Unknown regular expression type 'help'; valid types are
'findutils-default', 'ed'
$ find . -regextype help 2>&1 |head -c99 \
|sed "s/\xe2\x80\x98/'/g; s/\xe2\x80\x99/'/g" |hd
00000000 66 69 6e 64 3a 20 55 6e 6b 6e 6f 77 6e 20 72 65 |find: Unknown re|
00000010 67 75 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e |gular expression|
00000020 20 74 79 70 65 20 27 68 65 6c 70 27 3b 20 76 61 | type 'help'; va|
00000030 6c 69 64 20 74 79 70 65 73 20 61 72 65 20 27 66 |lid types are 'f|
00000040 69 6e 64 75 74 69 6c 73 2d 64 65 66 61 75 6c 74 |indutils-default|
00000050 27 2c 20 27 65 64 27 |', 'ed'|