Яке власне призначення опції GNU grep's -X і чому вона недокументована?


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двигунів регулярного генерування? Може хтось скаже мені, чому це цілеспрямовано не документується?


6
Цікаве відкриття! Я підозрюю, що мета залишити його без документації полягає в тому, щоб вони могли сміливо вилучати його з майбутніх версій за бажанням і без попереднього повідомлення. Інший приклад недокументованої опції GNU - це -EGNU sed, який забезпечує сумісність з BSD sed. (Очікую, що -Eце задокументується, якщо POSIX офіційно його
прийнять

3
Я погоджуюся з @ John1024, хоча єдиною людиною, яка може остаточно відповісти, є Степан Касал, який 7 лютого 2005 року задокументував -Xце свідомо недокументовано. (Його електронна адреса знаходиться в журналі змін, якщо ви хочете запитати його.)
Wildcard

3
Я намагався простежити це через історію git, але виявляється, він був доданий перед першим git-компіляцією grep (він був присутній в 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 від вт 3 листопада 21:38:52 1998). Імовірно, вони імпортували попередній VCS в git, як очевидно, що передує git.
дероберт

1
Також в grep 2.0, який найдавніший можна знайти на ftp.gnu.org/gnu/grep/?C=M
O=

3
... але не в 1.6, який я знайшов на oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (зверніть увагу: я не доклав жодних зусиль, щоб перевірити справжність цього коду) так Це здається, що десь між 1.6 (1992) та 2.0 (1993)
дероберт

Відповіді:


67

Її мета - забезпечити доступ до різних матчерів, реалізованих у GNU grepв тій чи іншій формі, зокрема, відповідників AWK, які недоступні в іншому випадку, ймовірно, для тестування (див. Помилку 16481, яка обговорює додавання gawkта posixawkmatchers).

Однак наразі це баггі, і це є причиною того, що це документально підтверджено як недокументований :

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

будь ласка, залиште його без документації.

Він не забезпечує жодної нової функціональності, крім -X awk.

І реалізація awk regexps не ідеальна, я думаю.

Новий регулярний кодекс GNU містить певні засоби для встановлення синтаксису стилю AWK, так. Але gawk не використовує його безпосередньо: він спочатку аналізує регулярний вираз.

Зокрема, awk regexps дозволяє послідовності виходу \ NNN, де NNN - вісімкове значення. Отже / \ 040 / математичний простір. grep -X awk, схоже, це не підтримує.

Я боюся, що regex.c не підтримує ці послідовності втечі.

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

Я думаю, що це не варте клопоту.

Степан

Наступні попросили коментар буде додано, і при умови , трохи більше фону на -Xопції:

Моя власна схильність полягає в тому, щоб запропонувати просто видалити -X повністю. Я підозрюю, що його додав оригінальний автор переважно для тестування. Якщо він залишиться, принаймні додайте такий коментар.

/* -X is undocumented on purpose. */

щоб уникнути подальшого обговорення вирішеного питання.

Арнольд

що Степан зробив незабаром після цього .


3
Приємна археологічна робота, дякую Стівен.
xhienne

2
Дякую :-). Шлях, на жаль, зупиняється на grep 2.0; У мене -Xскладається враження, що версія, яка введена , ймовірно, як побічний ефект переписування DFA, але журнал змін короткий для деталей.
Стівен Кітт

7
"щоб уникнути подальшого обговорення вирішеного питання." Як це вийшло? ;)
Брок Адамс

1
Не став би "-X без документації, тому що це баггі", був би кращим вибором?
JAB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.