Qual é o propósito real da opção -X do GNU grep e por que ela não é documentada?

58

Ao ler esta pergunta , descobri que o GNU greptem uma -Xopção que espera um argumento. Estranhamente, isso não é mencionado na página de manual nem na página de informações.

Olhando para o código fonte, existe esse comentário no meio da --helpsaída :

/* -X is deliberately undocumented.  */

Olhando adiante, parece que a -X matcheropção define o motor utilizado para a expressão regular , matchersendo um dos grep , egrep, fgrep, awk, gawk, posixawke perl(a partir da versão 2.25).

Alguns desses valores são rigorosamente idênticas às opções existentes (ou seja grep -G, grep -E, grep -Fe grep -P). Por outro lado, as três awkvariantes não têm opções correspondentes.

Alguém sabe qual é o objetivo real dessa opção, especialmente com um dos awkmecanismos regexp? Alguém pode me dizer por que não foi propositadamente documentado?

xhienne
fonte
6
Descoberta interessante! Suspeito que o objetivo de deixá-lo sem documentos seja para que eles possam se sentir livres para removê-lo de versões futuras à vontade e sem aviso prévio. Outro exemplo de uma opção não documentada do GNU é -Epara o GNU sed, que fornece compatibilidade com o BSD sed. (Espero -Etornar-se documentada se POSIX formalmente adota-lo e removidos se isso não acontece.)
John1024
3
Eu concordo com @ John1024, embora a única pessoa que possa responder definitivamente seja Stepan Kasal, que, em 7 de fevereiro de 2005, documentou que -Xestá deliberadamente indocumentado. (Seu endereço de email está no changelog se você quiser perguntar a ele.)
Wildcard
3
Tentei rastrear isso através do histórico do git, mas acontece que foi adicionado antes do primeiro commit do git do grep (estava presente em 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 de 3 de novembro de 21:38:52 em 1998). Presumivelmente, eles importaram o VCS anterior para o git, como obviamente isso é anterior ao git.
derobert
11
Também no grep 2.0, que é o mais antigo encontrado em ftp.gnu.org/gnu/grep/?C=M;O=A
derobert 15/17
3
... mas não na versão 1.6 que encontrei em oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (nota: não fiz nenhum esforço para verificar a autenticidade desse código), então que iria aparecer até à data para algures entre 1.6 (1992) e 2.0 (1993)
derobert

Respostas:

67

Seu objetivo é fornecer acesso aos vários matchers implementados no GNU grepde uma forma ou de outra, em particular os matchers AWK que não estão disponíveis de outra forma, provavelmente para fins de teste (veja o bug 16481 que discute a adição de gawke posixawkmatchers).

No entanto, atualmente é de buggy, razão pela qual está documentado como não documentado :

Em quinta-feira, 27 de janeiro de 2005 às 16:06:04 - 500, Charles Levert escreveu:
> A opção '-X' e, em particular, seu uso com o "awk" matcher
> ("-X awk") não são documentados.

por favor, deixe indocumentado.

Ele não fornece nenhuma nova funcionalidade além do -X awk.

E a implementação do awk regexps não é perfeita, eu acho.

O novo regex GNU conatins alguns meios para definir a sintaxe do estilo AWK, sim. No entanto, o gawk não o usa diretamente: ele analisa o regex primeiro.

Em particular, os regexps do awk permitem seqüências de escape \ NNN, onde NNN é um valor octal. Portanto, / \ 040 / mathes space. O grep -X awk não parece suportar isso.

Receio que o regex.c não suporte essas seqüências de escape.

Teríamos que garantir que as expressões regulares fossem totalmente compatíveis com as expressões regulares do awk antes de decidirmos documentar (e, portanto, oferecer suporte) esse recurso.

Eu acho que não vale a pena.

Stepan

Um acompanhamento solicitou que o comentário fosse adicionado e forneceu um pouco mais de fundo sobre a -Xopção:

Minha inclinação é sugerir apenas remover -X completamente. Eu suspeito que foi adicionado pelo autor original principalmente para fins de teste. Se ele permanecer, adicione pelo menos um comentário como este.

/* -X is undocumented on purpose. */

para evitar discussões futuras sobre um problema resolvido.

Arnold

o que Stepan fez logo depois .

Stephen Kitt
fonte
3
Bom trabalho arqueológico, obrigado Stephen.
xhienne
2
Obrigado :-). Infelizmente, a trilha para no grep 2.0; Tenho a impressão de que é a versão que foi introduzida -X, provavelmente como efeito colateral da reescrita do DFA, mas o registro de alterações é curto em detalhes.
Stephen Kitt
7
"para evitar discussões futuras sobre um problema resolvido." Como isso funcionou? ;)
Brock Adams
11
"-X não está documentado porque é de buggy" teria sido uma escolha melhor?
JAB