บรรทัด grep เริ่มต้นด้วย“ 1” ใน Ubuntu


46

ฉันพยายามค้นหาบรรทัดที่ขึ้นต้นด้วย "1" โดยใช้

ls -1 | grep ^1*

แต่มันส่งคืนบรรทัดที่ไม่ได้ขึ้นต้นด้วย 1 สิ่งที่ฉันขาดหายไปคืออะไร


Just note อื่น: หากคุณต้องการใช้ grep เพื่อ จำกัดlsเอาต์พุตคุณจะพบปัญหาหากชื่อไฟล์มีอักขระแปลก ๆ เช่น newlines ... คำสั่งอื่น ๆ อีกมากมาย (อย่างlsน้อยก็ไม่ใช่เวอร์ชั่นที่ฉันต้องตรวจสอบ) มีตัวเลือกในการให้เอาต์พุตที่คั่นด้วย null ซึ่งคุณสามารถประมวลผลได้อย่างปลอดภัยด้วยgrep -z
Gert van den Berg

ขอบคุณ @GertvandenBerg! มีอักขระอะไรแปลก ๆ บ้างเช่นการขึ้นบรรทัดใหม่ทำให้เกิด grep คำสั่งใดที่ให้เอาต์พุตแบบแยก null
ทิม

1
ค้นหาด้วย -print0 เครื่องมือ GNU อื่น ๆ ส่วนใหญ่มีตัวเลือก -0 หรือ -z (เรียงลำดับ xargs ฯลฯ ด้วย) หากชื่อไฟล์มีการขึ้นบรรทัดใหม่มันจะเป็นไปไม่ได้ที่จะรู้ว่าสองบรรทัดนั้นเป็นชื่อไฟล์ที่มีการขึ้นบรรทัดใหม่หรือสองชื่อไฟล์แยกกัน
Gert van den Berg

คำตอบ:


67

การแสดงออกปกติของคุณไม่ได้หมายความว่าคุณคิดอย่างไร มันตรงกับทุกบรรทัดที่เริ่มต้น (^) กับหนึ่ง (1) ซ้ำศูนย์หรือมากกว่า (*) ครั้ง สตริงทั้งหมดตรงกับนิพจน์ทั่วไปนั้น grep '^1'ทำในสิ่งที่คุณต้องการ


33

คุณลองต่อไปนี้หรือไม่?

 ls -1 | grep "^1"

นั่นคือเอาสิ่ง*ที่บอกโดยทั่วไปgrepแล้วพบการ^1แสดงออกที่เป็นศูนย์หรือมากกว่านั้น กล่าวอีกนัยหนึ่ง: จับคู่บรรทัดที่ขึ้นต้นด้วย 1 หรือไม่


13

แม้ว่าสิ่งนี้จะไม่ตอบคำถามของคุณ แต่นี่เป็นทางออกที่ดีกว่าสำหรับสิ่งที่ดูเหมือนจะเป็นเป้าหมายของคุณ:

ls -ld 1*

คุณสามารถใช้ glob 1เปลือกจะแสดงรายการไฟล์ทั้งหมดที่เริ่มต้นด้วย โปรดทราบว่า*มีความหมายที่แตกต่างในเปลือกกลมกว่านิพจน์ปกติ


ขอบคุณ! +1 * มีความหมายแตกต่างกันอย่างไรในเปลือกกลมและในการแสดงออกปกติ?
ทิม

2
ในเชลล์ glob *เป็นสัญลักษณ์แทนความหมาย "0 หรือมากกว่าของตัวละครใด ๆ " อธิบายความหมายของ regex ในคำตอบของ otokan
จอร์แดน

3

^ 1 * จับคู่ทั้งบรรทัดหรือเหมือนที่กล่าวไว้ข้างต้น ^ 1 มีสตริงอยู่ในบรรทัด

รูปแบบที่แตกต่างกันของ regex ใช้สัญลักษณ์ที่แตกต่างกันแสดงถึงตัวอักษรบางตัวเลือกระบุสไตล์ที่คุณต้องการ และตัวเลือกที่แตกต่างกันระบุว่าคุณต้องการจับคู่ทั้งบรรทัดหรือเพียงแค่ส่วนหนึ่งของมันหรือป้อนทั้งหมดเป็นสตริงเดียว

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