อะไรคือวัตถุประสงค์ที่แท้จริงของตัวเลือก -X GNU grep และทำไมมันไม่มีเอกสาร?


58

จากการอ่านคำถามนี้ฉันได้ค้นพบว่า GNU grepมี-Xตัวเลือกที่คาดว่าจะมีข้อโต้แย้ง น่าแปลกที่มันถูกกล่าวถึงไม่ว่าในหน้าคนหรือในหน้าข้อมูล

ดูซอร์สโค้ดมีคอมเม้นต์นั้นอยู่ตรงกลาง--helpเอาท์พุท :

/* -X is deliberately undocumented.  */

มองต่อไปก็ปรากฏว่า-X matcherตัวเลือกชุดเครื่องมือที่ใช้สำหรับแต่ง regexp , matcherเป็นหนึ่ง grep , egrep, fgrep, awk, gawk, posixawkและperl(เหมือนรุ่น 2.25)

บางส่วนของค่าเหล่านั้นอย่างเคร่งครัดเหมือนกันกับตัวเลือกที่มีอยู่ (คือgrep -G, grep -E, grep -Fและgrep -P) ในขณะที่awkตัวแปรทั้งสามไม่มีตัวเลือกที่สอดคล้องกัน

มีคนรู้ว่าอะไรคือวัตถุประสงค์ที่แท้จริงของตัวเลือกนี้โดยเฉพาะอย่างยิ่งกับหนึ่งในโปรแกรมawkregexp ใครสามารถบอกฉันได้ว่าทำไมมันถึงไม่มีเอกสารรับรองโดยเจตนา?


6
การค้นพบที่น่าสนใจ! ฉันสงสัยว่าจุดประสงค์ของการปล่อยให้มันไม่มีเอกสารคือเพื่อให้พวกเขาสามารถนำออกจากเวอร์ชันในอนาคตได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้า อีกตัวอย่างของตัวเลือกที่ไม่มีเอกสาร GNU -Eสำหรับ GNU sed ซึ่งให้ความเข้ากันได้กับ BSD sed (ฉันคาดหวังว่า-Eจะได้รับการบันทึกหาก POSIX ใช้อย่างเป็นทางการและนำออกหากไม่เป็นเช่นนั้น)
John1024

3
ฉันเห็นด้วยกับ @ John1024 แม้ว่าบุคคลเพียงคนเดียวที่สามารถตอบได้อย่างแน่นอนคือ Stepan Kasal ซึ่งเมื่อวันที่ 7 กุมภาพันธ์ พ.ศ. 2548 เอกสารระบุว่า-Xไม่มีเอกสารโดยเจตนา (ที่อยู่อีเมลของเขาอยู่ในการเปลี่ยนแปลงหากคุณต้องการถามเขา)
Wildcard

3
ฉันพยายามที่จะติดตามสิ่งนี้ผ่านประวัติศาสตร์ git แต่ปรากฎว่ามันถูกเพิ่มเข้ามาก่อนคอมไพล์คอมไพล์ครั้งแรกของ grep (มีอยู่ใน สันนิษฐานว่าพวกเขานำเข้า VCS ก่อนหน้านี้เข้าสู่ระบบคอมไพล์
Derobert

1
นอกจากนี้ใน grep 2.0 ซึ่งเป็นรุ่นเก่าแก่ที่พบได้ที่ftp.gnu.org/gnu/grep/?C=M;O=A
derobert

3
... แต่ไม่พบใน 1.6 ที่ฉันพบที่oldlinux.org/Linux.old/distribution/TAMU/TAMU-1.0D/src/tar/ … (หมายเหตุ: ฉันไม่ได้พยายามตรวจสอบความถูกต้องของรหัสนั้น) มันจะปรากฏขึ้นเพื่อวันที่ระหว่าง 1.6 (1992) และ 2.0 (1993)
Derobert

คำตอบ:


67

โดยมีวัตถุประสงค์คือเพื่อให้สามารถเข้าถึงการจับคู่ต่าง ๆ ที่ใช้ใน GNU grepในรูปแบบเดียวหรืออื่น ๆ โดยเฉพาะอย่างยิ่งการจับคู่ AWK ซึ่งไม่สามารถใช้ได้เป็นอย่างอื่นอาจเป็นเพื่อการทดสอบ (ดูข้อผิดพลาด 16481ซึ่งกล่าวถึงการเพิ่มgawkและposixawkจับคู่)

อย่างไรก็ตามมันเป็นรถบั๊กกี้ซึ่งเป็นเหตุผลว่าทำไมมันจึงถูกทำเป็นเอกสารว่าไม่มีเอกสาร :

ในวันพฤหัสบดีที่ 27 มกราคม 2005 เวลา 04:06:04 PM -0500 Charles Levert เขียนว่า:
ตัวเลือก '-X' และโดยเฉพาะอย่างยิ่งการใช้งานกับ "awk" matcher
> ("-X awk") ไม่มีเอกสาร

กรุณาทิ้งไว้โดยไม่มีเอกสาร

มันไม่มีฟังก์ชั่นใหม่นอกเหนือจาก -X awk

และการใช้งาน awk regexps นั้นไม่สมบูรณ์แบบฉันคิดว่า

ใหม่ GNU regex conatins หมายถึงการตั้งค่ารูปแบบไวยากรณ์ AWK ใช่ แต่เหยี่ยวไม่ได้ใช้มันโดยตรงมันแยกวิเคราะห์ Regex ก่อน

โดยเฉพาะอย่างยิ่ง awk regexps อนุญาต escape sequences \ NNN โดยที่ NNN คือค่าฐานแปด ดังนั้น / \ 040 / ช่องว่างทางคณิตศาสตร์ grep -X awk ดูเหมือนจะไม่สนับสนุนสิ่งนี้

ฉันกลัวว่า regex.c ไม่รองรับลำดับการหลีกเลี่ยงเหล่านี้

เราจะต้องตรวจสอบให้แน่ใจว่า regexes สามารถทำงานร่วมกับ awk regexes ได้อย่างสมบูรณ์ก่อนที่เราจะตัดสินใจจัดทำเอกสาร (และสนับสนุน) คุณลักษณะนี้

ฉันคิดว่ามันไม่คุ้มกับปัญหา

สเตฟาน

การติดตามขอให้เพิ่มความคิดเห็นและให้พื้นหลังเพิ่มเติมเล็กน้อยใน-Xตัวเลือก:

ความชอบของฉันคือการแนะนำให้ลบ -X ทั้งหมด ฉันสงสัยว่ามันถูกเพิ่มโดยผู้เขียนต้นฉบับเพื่อการทดสอบเป็นหลัก ถ้าอย่างนั้นก็ยังอยู่ในนั้นอย่างน้อยก็เพิ่มความคิดเห็นแบบนี้

/* -X is undocumented on purpose. */

เพื่อหลีกเลี่ยงการอภิปรายปัญหาที่แก้ไขในอนาคต

อาร์โนล

ซึ่งสเตฟานได้หลังจากนั้นไม่นาน


3
งานโบราณคดีที่ดีขอบคุณสตีเฟ่น
xhienne

2
ขอบคุณ :-) เส้นทางหยุดที่ grep 2.0 น่าเสียดาย; ฉันได้รับความประทับใจว่าเป็นรุ่นที่เปิดตัว-Xอาจเป็นผลข้างเคียงของการเขียน DFA ใหม่ แต่การเปลี่ยนแปลงมีรายละเอียดสั้น ๆ
Stephen Kitt

7
"เพื่อหลีกเลี่ยงการอภิปรายปัญหาที่แก้ไขในอนาคต" มันเป็นอย่างไรบ้าง ;)
Brock Adams

1
จะไม่ "-X ไม่มีเอกสารเพราะเป็นรถ" เป็นตัวเลือกที่ดีกว่าหรือไม่
JAB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.