ฉันพบว่าecho file|grep fil*
ล้มเหลว แต่echo abcd|grep abc*
สำเร็จ
ฉันไม่เข้าใจใครจะอธิบายได้ไหม
ฉันพบว่าecho file|grep fil*
ล้มเหลว แต่echo abcd|grep abc*
สำเร็จ
ฉันไม่เข้าใจใครจะอธิบายได้ไหม
คำตอบ:
มีสองปัญหากับตัวอย่างของคุณ
หลักแรกคือคุณสมมติว่านิพจน์ทั่วไปทำงานเหมือนกับรูปแบบ globในนั้น*
คือ wildcard หมายถึง "ลำดับของอักขระใด ๆ " ในการแสดงออกปกติ*
หมายถึง "จำนวนของอะตอมก่อนหน้าใด ๆ" แทนดังนั้นfil*
วิธีการf
ตามi
ตามศูนย์หรือมากกว่าl
ตัวอักษร คุณจำเป็นต้องพูดgrep fil.*
เพื่อให้ได้ความหมายที่ตั้งใจไว้: .
หมายถึง "ตัวละครตัวเดียวดังนั้นนั่น.*
หมายถึง" ลำดับตัวอักษรใด ๆ "
ปัญหาที่น้อยกว่าคือคุณกำลังใช้อักขระพิเศษที่ไม่ได้อ้างถึงซึ่งหมายถึงบางสิ่งภายใต้กฎ glob ซึ่งหมายความว่าเชลล์สามารถตีความได้ หากคุณมีไฟล์ใด ๆ ในไดเรกทอรีท้องถิ่นตรงกับรูปแบบ glob fil*
หรือabc*
, เปลือกจะขยายตัวพวกเขาจึงgrep
จะได้รับชื่อไฟล์ขยายเป็นรูปแบบไม่ได้ตั้งใจ RE echo file | grep 'fil.*'
เมื่อใดก็ตามที่คุณใช้ตัวอักษรเช่นในบรรทัดคำสั่งที่คุณควรจะพูดกับพวกเขา:
echo file|grep fil*
คำตอบด้วยfil
e