ปัญหาเกี่ยวกับคุณสมบัติที่เพิ่มขึ้นใน - regex ของโปรแกรมอรรถประโยชน์“ ค้นหา”


0

ตัวอย่างเช่นไม่พบไฟล์:

: > 12; basename $(find -E . -regex '^(.*)(\d{2})' -print 2>/dev/null)

แต่สิ่งนี้จะ:

basename $(find -E . -regex '^(.*)([0-9]{2})' -print 2>/dev/null)

ในเวลาเดียวกันตัวอย่างเช่น:

echo -e '12\nabc\n456' | grep -E -e '^(\d{3})'

ทำงานค่อนข้างดี regcomp()แต่ดูเหมือนจะใช้เหมือนกัน

ฉันทำอะไรผิดและฉันจะแก้ไขได้อย่างไร


1
บทความที่ใหม่กว่า OS X grepใช้ฐานรหัสไม่BSD ตัวเลือกที่เป็นร็อกของและผมเชื่อว่าพิเศษให้กับ OS X ได้ใช้งานและและตัวละครคลาสไม่ถูกต้อง GNU grep-EPOSIX ERE and PCREfindBREERE\d
fd0

@ fd0 ความคิดเห็นที่ดีที่สุด!
Cave-canem

คำตอบ:


1

แต่ดูเหมือนว่ามันจะมีข้อผิดพลาดในพื้นเมือง MacOS พบในที่ของ-regexตัวเลือกที่ไม่ถูกต้องจัดการใด ๆ man re_formatของทางลัดที่อธิบายไว้ใน คำสั่งต่อไปนี้ดูเหมือนว่าจะทำงาน:

find -E . -regex '^(.*)([[:digit:]]{2})' -print

ตัวแปรที่เรียบง่ายกว่านี้เล็กน้อยดูเหมือนว่าจะทำงาน:

find -E . -regex '.*[[:digit:]]{2}' -print

กล่าวโดยย่อgrep -Eและตัวเลือกfinds -regexดูเหมือนจะไม่จัดการกับนิพจน์ทั่วไปในลักษณะเดียวกัน


@Erik Fuller ฉันคิดว่ามันเกี่ยวกับสิ่งที่แตกต่างกันเช่นเดียวกับที่gfind . -regextype 'egrep' -regex '^(.*)(\d{2})' -print 2>/dev/nullใช้งานไม่ได้
cave-canem

เป็นไปได้ที่ gfind จะมีบั๊กเหมือนกัน ในกรณีใด ๆ ดูเหมือนว่าจะมีวิธีแก้ปัญหาที่ทำงานได้
Eirik Fuller

ปัญหาคือการที่ปล่อยคลาสทั้งหมดของ "Enhanced Basic และ Enhanced REs แบบขยายออกมา" ในกรณีนี้มันไม่ชัดเจนว่าทำไม "egrep" ทำงานอย่างถูกต้องเพราะมันใช้เหมือนกันregcomp ()
cave-canem

มันลดจำนวน REs ที่ขยายออกไปบางส่วน แต่ไม่ใช่ทั้งหมด [[:digit:]]สร้างอธิบายไว้ในคำตอบนี้ดูเหมือนจะไม่ทำงานในโดยไม่ต้องfind -E
Eirik Fuller

ไม่ขยาย REs แต่ "ปรับปรุงขั้นพื้นฐานและเพิ่ม REs ขยาย"
cave-canem

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