Какова реальная цель опции -X GNU grep и почему она недокументирована?

58

Читая этот вопрос , я обнаружил, что в GNU grepесть -Xопция, которая ожидает аргумент. Как ни странно, это не упоминается ни на странице руководства, ни на странице информации.

Глядя на исходный код, этот комментарий находится прямо в середине --helpвывода :

/* -X is deliberately undocumented.  */

Глядя дальше, кажется , что -X matcherопция устанавливает двигатель , используемый для регулярного выражения , matcherбудучи одним из grep , egrep, fgrep, awk, gawk, posixawkи perl(в версии 2.25).

Некоторые из этих значений строго идентичны существующих вариантов (а именно grep -G, grep -E, grep -Fи grep -P). С другой стороны, три awkварианта не имеют соответствующих опций.

Кто-нибудь знает, какова реальная цель этой опции, особенно с одним из awkдвигателей регулярных выражений? Может кто-нибудь сказать мне, почему это намеренно не задокументировано?

xhienne
источник
6
Интересное открытие! Я подозреваю, что цель оставить его недокументированным состоит в том, чтобы они могли свободно удалять его из будущих версий по желанию и без предварительного уведомления. Другой пример недокументированной опции GNU - -Eдля GNU sed, которая обеспечивает совместимость с BSD sed. (Я ожидаю, -Eчто документально подтвердится, если POSIX официально примет его и удалит, если он этого не сделает.)
John1024
3
Я согласен с @ John1024, хотя единственным человеком, который может дать окончательный ответ, является Степан Касал, который 7 февраля 2005 года задокументировал это -X, намеренно не имея документов. (Его адрес электронной почты находится в списке изменений, если вы хотите спросить его.)
Wildcard
3
Я попытался отследить это в истории git, но оказалось, что он был добавлен до первого git-коммита grep (он присутствовал в 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 от Tue Nov 3 21:38:52 1998). Предположительно они импортировали предыдущую VCS в git, что очевидно предшествует git.
Дероберт
1
Также в grep 2.0, который является самым старым из найденных на ftp.gnu.org/gnu/grep/?C=M;O=A
derobert
3
... но не в 1.6, которую я нашел на oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (примечание: я не приложил никаких усилий для проверки подлинности этого кода), поэтому Похоже, что на сегодняшний день это где-то между 1,6 (1992) и 2,0 (1993)
Дероберт

Ответы:

67

Его цель состоит в том, чтобы обеспечить доступ к различным matchers , реализованных в GNU grepв той или иной форме, в частности , AWK matchers , которые не доступны в противном случае, вероятно , для целей тестирования (см ошибка 16481 , которая обсуждает добавив gawkи posixawkmatchers).

Однако в настоящее время он содержит ошибки, поэтому он задокументирован как недокументированный :

Чт, 27 января 2005 г. в 16:06:04 -0500, Чарльз Леверт писал:
> Опция '-X' и, в частности, ее использование с сопоставителем "awk"
> ("-X awk") не документирована.

пожалуйста, оставьте это без документов.

Он не предоставляет никакой новой функциональности, кроме -X awk.

И реализация регулярных выражений в awk, я думаю, не идеальна.

Новое регулярное выражение GNU содержит некоторые средства для установки синтаксиса стиля AWK, да. Однако gawk не использует его напрямую: сначала он анализирует регулярное выражение.

В частности, регулярные выражения awk допускают escape-последовательности \ NNN, где NNN - восьмеричное значение. Итак, \ \ 040 / соответствует пространству. grep -X awk, похоже, не поддерживает это.

Боюсь, что regex.c не поддерживает эти escape-последовательности.

Мы должны были убедиться, что регулярные выражения полностью совместимы с регулярными выражениями awk, прежде чем мы решили задокументировать (и, следовательно, поддержать) эту функцию.

Я думаю, что это не стоит хлопот.

Степан

Последующие попросили комментарий будет добавлен, и при условии , немного больше фона на -Xопции:

Я склонен предложить полностью удалить -X. Я подозреваю, что это было добавлено оригинальным автором главным образом для целей тестирования. Если он собирается остаться, по крайней мере, добавить комментарий, как это.

/* -X is undocumented on purpose. */

чтобы избежать дальнейшего обсуждения решенного вопроса.

Арнольд

что Степан сделал вскоре после этого .

Стивен Китт
источник
3
Хорошая археологическая работа, спасибо, Стивен.
Ксиэнн
2
Спасибо :-). Тропа останавливается на grep 2.0, к сожалению; У меня сложилось впечатление, что это версия, которая была представлена -X, вероятно, как побочный эффект переписывания DFA, но в списке изменений не хватает деталей.
Стивен Китт
7
«чтобы избежать дальнейшего обсуждения решенного вопроса». Как это получилось? ;)
Брок Адамс
1
Разве "-X недокументировано, потому что он глючит", был бы лучшим выбором?
JAB