ฉันพยายามค้นหาบรรทัดที่ขึ้นต้นด้วย "1" โดยใช้
ls -1 | grep ^1*
แต่มันส่งคืนบรรทัดที่ไม่ได้ขึ้นต้นด้วย 1 สิ่งที่ฉันขาดหายไปคืออะไร
ฉันพยายามค้นหาบรรทัดที่ขึ้นต้นด้วย "1" โดยใช้
ls -1 | grep ^1*
แต่มันส่งคืนบรรทัดที่ไม่ได้ขึ้นต้นด้วย 1 สิ่งที่ฉันขาดหายไปคืออะไร
คำตอบ:
การแสดงออกปกติของคุณไม่ได้หมายความว่าคุณคิดอย่างไร มันตรงกับทุกบรรทัดที่เริ่มต้น (^) กับหนึ่ง (1) ซ้ำศูนย์หรือมากกว่า (*) ครั้ง สตริงทั้งหมดตรงกับนิพจน์ทั่วไปนั้น grep '^1'
ทำในสิ่งที่คุณต้องการ
คุณลองต่อไปนี้หรือไม่?
ls -1 | grep "^1"
นั่นคือเอาสิ่ง*
ที่บอกโดยทั่วไปgrep
แล้วพบการ^1
แสดงออกที่เป็นศูนย์หรือมากกว่านั้น กล่าวอีกนัยหนึ่ง: จับคู่บรรทัดที่ขึ้นต้นด้วย 1 หรือไม่
แม้ว่าสิ่งนี้จะไม่ตอบคำถามของคุณ แต่นี่เป็นทางออกที่ดีกว่าสำหรับสิ่งที่ดูเหมือนจะเป็นเป้าหมายของคุณ:
ls -ld 1*
คุณสามารถใช้ glob 1
เปลือกจะแสดงรายการไฟล์ทั้งหมดที่เริ่มต้นด้วย โปรดทราบว่า*
มีความหมายที่แตกต่างในเปลือกกลมกว่านิพจน์ปกติ
*
เป็นสัญลักษณ์แทนความหมาย "0 หรือมากกว่าของตัวละครใด ๆ " อธิบายความหมายของ regex ในคำตอบของ otokan
^ 1 * จับคู่ทั้งบรรทัดหรือเหมือนที่กล่าวไว้ข้างต้น ^ 1 มีสตริงอยู่ในบรรทัด
รูปแบบที่แตกต่างกันของ regex ใช้สัญลักษณ์ที่แตกต่างกันแสดงถึงตัวอักษรบางตัวเลือกระบุสไตล์ที่คุณต้องการ และตัวเลือกที่แตกต่างกันระบุว่าคุณต้องการจับคู่ทั้งบรรทัดหรือเพียงแค่ส่วนหนึ่งของมันหรือป้อนทั้งหมดเป็นสตริงเดียว
ls
เอาต์พุตคุณจะพบปัญหาหากชื่อไฟล์มีอักขระแปลก ๆ เช่น newlines ... คำสั่งอื่น ๆ อีกมากมาย (อย่างls
น้อยก็ไม่ใช่เวอร์ชั่นที่ฉันต้องตรวจสอบ) มีตัวเลือกในการให้เอาต์พุตที่คั่นด้วย null ซึ่งคุณสามารถประมวลผลได้อย่างปลอดภัยด้วยgrep -z