ฉันมีหลายไฟล์ที่มีชื่อไฟล์ฐานเดียวกัน ฉันต้องการลบทั้งหมดยกเว้นหนึ่งรายการ
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
หากฉันไม่ต้องการเก็บไว้ฉันรู้ว่าฉันสามารถrm foo.*
ใช้ได้
TLDPสาธิต^
การคัดค้านการแข่งขัน จากการทดลองและข้อผิดพลาดฉันสามารถค้นพบสิ่งนั้นได้
rm foo.*[^org]
ทำในสิ่งที่ฉันต้องการ แต่ฉันไม่เข้าใจไวยากรณ์
นอกจากนี้ในขณะที่ไม่ได้เป็นข้อ จำกัด ในกรณีที่ใช้งานของฉันฉันคิดว่ารูปแบบนี้ยังไม่สนใจและfoo.o
foo.or
รูปแบบนี้ทำงานอย่างไรและรูปทรงแบบใดที่ละเว้นเพียง foo.org
ดูเหมือน
Regular Expression
คุณกำลังใช้ คุณควรระวังตัวละครจัดกลุ่มของคุณ โดยใช้วงเล็บคุณได้ระบุความหมายชั้นเรียนตัวอักษรที่คุณจะลบไฟล์ใด ๆ ที่มีส่วนขยายด้วยตัวอักษรo
, r
หรือg
ในลำดับใด ใช้วงเล็บเพื่อสร้างกลุ่มและรักษาลำดับของอักขระ
foo.*[^org]
จะตรงกับชื่อไฟล์ใด ๆ ที่ขึ้นต้นด้วยfoo.
อักขระหนึ่งตัวขึ้นไปหลังจากจุดที่อักขระสุดท้ายไม่ใช่ o, r หรือ g ดังนั้นจึงจะตรงfoo.orb
แต่ไม่foo.org
หรือหรือfoo.or
foo.o
คำตอบของ GlennJackman แสดงวิธีเปิดใช้งานคุณสมบัติการจับคู่รูปแบบเพิ่มเติมเพื่อคัดค้านการจับคู่
rm foo.*[^org]
ลบไฟล์ทั้งหมดที่ผ่านมาของตัวละครจะไม่o
,r
หรือg
ดังนั้นfoo.foo
จะไม่ตรงกับอย่างใดอย่างหนึ่ง