คอมพิวเตอร์ของฉันใช้งาน 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
ไป.