@OP,
glob pettern ไม่ได้ใช้สำหรับชื่อไฟล์เท่านั้นหรือไม่?
ไม่รูปแบบ "glob" ไม่ได้ใช้สำหรับชื่อไฟล์เท่านั้น คุณใช้เพื่อเปรียบเทียบสตริงเช่นกัน ในตัวอย่างของคุณคุณสามารถใช้ case / esac เพื่อค้นหารูปแบบสตริง
gg=svm-grid-ch
case "$gg" in
*grid* ) echo "found";;
esac
case "$gg" in ????grid*) echo "found";; esac
case "$gg" in s???grid*) echo "found";; esac
ในการทุบตีควรใช้รูปแบบลูกโลกเมื่อใดและควรใช้นิพจน์ทั่วไปเมื่อใด ขอบคุณ!
Regex มีความหลากหลายและ "สะดวก" กว่า "รูปแบบลูกโลก" อย่างไรก็ตามเว้นแต่คุณจะทำงานที่ซับซ้อนซึ่ง "globbing / Extended globbing" ไม่สามารถให้ได้อย่างง่ายดายก็ไม่จำเป็นต้องใช้ regex ไม่รองรับ Regex สำหรับเวอร์ชันของ bash <3.2 (ตามที่เดนนิสกล่าวถึง) แต่คุณยังสามารถใช้ globbing แบบขยายได้ (โดยการตั้งค่าextglob
) สำหรับ globbing ขยายให้ดูที่นี่และบางตัวอย่างง่ายๆที่นี่
อัปเดตสำหรับ OP: ตัวอย่างการค้นหาไฟล์ที่ขึ้นต้นด้วยอักขระ 2 ตัว (จุด "." หมายถึงอักขระ 1 ตัว) ตามด้วย "g" โดยใช้ regex
เช่นเอาท์พุท
$ shopt -s dotglob
$ ls -1 *
abg
degree
..g
$ for file in *; do [[ $file =~ "..g" ]] && echo $file ; done
abg
degree
..g
จากด้านบนไฟล์จะตรงกันเนื่องจากชื่อมีอักขระ 2 ตัวตามด้วย "g" (กล่าวคือ..g
).
การเทียบเท่ากับ globbing จะเป็นดังนี้: (ดูการอ้างอิงสำหรับความหมายของ?
และ*
)
$ for file in ??g*; do echo $file; done
abg
degree
..g