คอมพิวเตอร์ของฉันใช้งาน MacOS 10.12.3 และฉันใช้grepยูทิลิตี้ที่ติดตั้งระบบกับรุ่น 2.5.1-FreeBSD
เหล่านี้เป็นผลลัพธ์ที่ฉันได้รับเมื่อทดสอบ regexes ต่างๆ:
แต่ถ้าฉันเรียกใช้สิ่งเหล่านี้โดยใช้ GNU grep (รุ่น 2.25) ฉันได้รับต่อไปนี้:
grep ของ GNU ดูถูกต้องสำหรับฉันและ BSD นั้นไม่ถูกต้องใช่ไหม ทำไมพวกเขาถึงแตกต่างกัน ฉันไม่เข้าใจว่าทำไม grep ของ BSD จึงตรงกับ "a" เมื่อ regex ระบุว่าจะต้องเป็นไปตามจุดเริ่มต้นของบรรทัด
2
อย่าลังเลที่จะรายงานพฤติกรรมแรกเป็นข้อบกพร่อง
—
Satō Katsura
คุณจะเห็นว่า
—
Stéphane Chazelas
echo 'bababa' | grep -E '^(a|b)'เป็นสีแดงทั้งหมด -oและคุณจะมีปัญหาเดียวกันกับ ฉันเดาว่าgrepค้นหาการแข่งขันหลายรายการ แต่สำหรับการจับคู่ที่สองขึ้นไปจะใช้ regexp กับสิ่งที่อยู่ทางขวาของสิ่งที่จับคู่ในครั้งก่อน (เช่นในananaครั้งที่สองในกรณีของคุณ) โดยไม่ผ่านธง REG_NOTBOL ดูเพิ่มเติมecho banana | grep -Eo '^ban|^ana$'
@JdeBP บน OS X ของฉัน
—
ilkkachu
grepระบุตัวเองเช่นเดียวgrep (BSD grep) 2.5.1-FreeBSDกับ man page ที่อ้างถึง GNU เท่านั้นโดยกล่าวถึง "ตัวเลือกแบบยาวที่มีให้เพื่อความเข้ากันได้กับเวอร์ชัน GNU" นอกจากนี้ห้ามแจ้งให้ทราบลิขสิทธิ์หรือกล่าวถึงของ GPL (หรือ FSF) ถ้ามันมีประวัติกับ GNU util มันก็ยากที่จะบอก
เราแสดงให้เห็นว่าสิ่งนี้ทำให้เข้าใจผิด (-: สิ่ง
—
JdeBP
grepที่ถูกกล่าวถึงในคำตอบของทศวรรษทศวรรษที่แล้วที่คนจำนวนมากกำลังคิดว่าถูกต้องระบุว่าgrep (GNU grep) 2.5.1-FreeBSD(เท่าที่เห็นในการอภิปรายข้อผิดพลาด) มีประกาศลิขสิทธิ์ FSF และแน่นอนที่สุด GNU grepสิ่งที่ FreeBSD เรียกbsdgrepคือ OpenBSD โทรgrepและเป็น BSD grepไม่มี--colorตัวเลือกที่ยื่นตัวแปร FreeBSD นั่นคือสิ่งที่ระบุว่า. grep (BSD grep) 2.5.1-FreeBSDและแดกดันคือสิ่งที่คนคนหนึ่งในการอภิปรายข้อผิดพลาดบอกว่า FreeBSD สวิทช์grepไป.

