1

В моей системе 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’.

Я всегда думал, что умные цитаты (или как они там называются) являются бичом программного обеспечения Microsoft, оказывается, никто не защищен от этого безобразия. В моей другой системе (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 не работает. Что бы я ни пытался установить (и другие локали env vars), я вижу умные цитаты и / или кучу сообщений об ошибках о неправильных локалях.

Как вернуть мои одинарные кавычки?

1 ответ1

0

Это не конвертируется автоматически системой умных котировок. Этот текст является прямым выводом 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'|

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .