Apa tujuan sebenarnya dari opsi -X GNU grep dan mengapa tidak terdokumentasi?

58

Dengan membaca pertanyaan ini , saya telah menemukan bahwa GNU grepmemiliki -Xopsi yang mengharapkan argumen. Anehnya, itu tidak disebutkan di halaman manual atau di halaman info.

Melihat kode sumber, ada komentar tepat di tengah-tengah --helpoutput :

/* -X is deliberately undocumented.  */

Melihat lebih jauh, tampak bahwa -X matcherpilihan menetapkan mesin yang digunakan untuk regexp , matchermenjadi salah satu dari grep , egrep, fgrep, awk, gawk, posixawkdan perl(sebagai versi 2,25).

Beberapa dari nilai-nilai secara ketat identik dengan pilihan yang ada (yaitu grep -G, grep -E, grep -Fdan grep -P). Di sisi lain, ketiga awkvarian tidak memiliki opsi yang sesuai.

Apakah ada yang tahu apa tujuan sebenarnya dari opsi ini, terutama dengan salah satu awkmesin regexp? Adakah yang bisa memberi tahu saya mengapa itu sengaja tidak didokumentasikan?

Xhienne
sumber
6
Penemuan menarik! Saya menduga tujuan membiarkannya tidak berdokumen agar mereka dapat dengan bebas menghapusnya dari versi yang akan datang sesuka hati dan tanpa pemberitahuan. Contoh lain dari opsi tidak berdokumen GNU adalah -Euntuk sed GNU yang menyediakan kompatibilitas dengan sed BSD. (Saya berharap -Euntuk didokumentasikan jika POSIX secara resmi mengadopsinya dan menghapusnya jika tidak.)
John1024
3
Saya setuju dengan @ John1024, meskipun satu-satunya orang yang dapat menjawab secara pasti adalah Stepan Kasal, yang, pada 7 Februari 2005, mendokumentasikan yang -Xsengaja tidak didokumentasikan. (Alamat emailnya ada di changelog jika Anda ingin menanyakannya.)
Wildcard
3
Saya mencoba melacak ini melalui sejarah git, tetapi ternyata itu ditambahkan sebelum komit git pertama grep (hadir di 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 dari Tue 3 November 21:38:52 1998). Agaknya mereka mengimpor VCS sebelumnya ke git, seperti yang jelas ada sebelum git.
derobert
1
Juga di grep 2.0 yang merupakan yang tertua dapat ditemukan di ftp.gnu.org/gnu/grep/?C=M;O=A
derobert
3
... tetapi tidak dalam 1.6 yang saya temukan di oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (catatan: Saya tidak berusaha memverifikasi keaslian kode itu) jadi tampaknya tanggal sampai di suatu tempat antara 1,6 (1992) dan 2,0 (1993)
derobert

Jawaban:

67

Tujuannya adalah untuk menyediakan akses ke berbagai pencocokan yang diterapkan dalam GNU grepdalam satu bentuk atau lainnya, khususnya pencocokan AWK yang tidak tersedia sebaliknya, mungkin untuk tujuan pengujian (lihat bug 16481 yang membahas penambahan gawkdan posixawkpencocokan).

Namun saat ini kereta, yang menjadi alasan mengapa itu didokumentasikan sebagai tidak berdokumen :

Pada Kamis, 27 Januari 2005 pukul 16:06:04 PM -0500, Charles Levert menulis:
> Opsi '-X', dan khususnya penggunaannya dengan pencocokan "awk"
> ("-X awk") tidak berdokumen.

tolong tinggalkan itu tanpa dokumen.

Itu tidak menyediakan fungsionalitas baru selain -X awk.

Dan implementasi awk regexps tidak sempurna, saya pikir.

GNU regex baru mengandung beberapa cara untuk mengatur sintaks gaya AWK, ya. Namun gawk tidak menggunakannya secara langsung: ia mem-parsing regex terlebih dahulu.

Secara khusus, awk regexps memungkinkan urutan escape \ NNN, di mana NNN adalah nilai oktal. Jadi / \ 040 / berhitung ruang. grep -X awk sepertinya tidak mendukung ini.

Saya khawatir regex.c tidak mendukung urutan pelarian ini.

Kami harus memastikan bahwa regex sepenuhnya kompatibel dengan regk awk sebelum kami memutuskan untuk mendokumentasikan (dan dengan demikian mendukung) fitur ini.

Saya pikir itu tidak sepadan dengan masalahnya.

Stepan

Sebuah tindak lanjut meminta komentar yang akan ditambahkan, dan memberikan sedikit lebih latar belakang pada -Xpilihan:

Kecenderungan saya sendiri adalah menyarankan hanya menghapus -X seluruhnya. Saya menduga itu ditambahkan oleh penulis asli terutama untuk tujuan pengujian. Jika itu akan tetap tinggal, setidaknya tambahkan komentar seperti ini.

/* -X is undocumented on purpose. */

untuk menghindari diskusi di masa depan dari masalah yang diselesaikan.

Arnold

yang dilakukan Stepan tidak lama kemudian .

Stephen Kitt
sumber
3
Pekerjaan arkeologi yang bagus, terima kasih Stephen.
xhienne
2
Terima kasih :-). Sayangnya, jejak berhenti di grep 2.0; Saya mendapatkan kesan bahwa itu adalah versi yang diperkenalkan -X, mungkin sebagai efek samping dari penulisan ulang DFA, tetapi changelog kekurangan detail.
Stephen Kitt
7
"Untuk menghindari diskusi di masa depan tentang masalah yang diselesaikan." Bagaimana itu berhasil? ;)
Brock Adams
1
Bukankah "-X tidak berdokumen karena itu buggy" merupakan pilihan yang lebih baik?
JAB