นิพจน์ grep ต่อไปนี้แสดงรายการไฟล์. exe และ. html ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยอย่างสมบูรณ์
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
ฉันจะกลับรายการนี้เพื่อแสดงรายการที่ไม่ใช่. html หรือ. exe แทนได้อย่างไร (นั่นคือ, !=
.)
นิพจน์ grep ต่อไปนี้แสดงรายการไฟล์. exe และ. html ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยอย่างสมบูรณ์
ls -R |grep -E .*[\.exe]$\|.*[\.html]$
ฉันจะกลับรายการนี้เพื่อแสดงรายการที่ไม่ใช่. html หรือ. exe แทนได้อย่างไร (นั่นคือ, !=
.)
คำตอบ:
ใช้ตัวเลือกบรรทัดคำสั่ง-v
หรือ--invert-match
,
ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$
grep -v
หรือ
grep --invert-match
คุณสามารถทำสิ่งเดียวกันโดยใช้find
:
find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)
find
คำสั่งเป็นทางออกที่ความหมายมากที่สุดในการแก้ไขปัญหานี้ XY การรวมกันls
และgrep
เพื่อจุดประสงค์นี้ดูเหมือนว่าจะเป็นการแฮ็กที่ดีที่สุด นี่ควรเป็นคำตอบที่ยอมรับได้ (+1)
เพิ่ม-v
ตัวเลือกในgrep
คำสั่งของคุณเพื่อกลับผลลัพธ์
grep "subscription" | grep -v "spec"
ตามที่ระบุไว้หลายครั้งผกผันจะทำได้โดยตัวเลือกที่จะ-v
grep
ให้ฉันเพิ่ม (หวังว่าน่าขบขัน) โปรดทราบว่าคุณสามารถหาคำตอบได้ด้วยตนเองโดยgrep
พิมพ์ข้อความช่วยเหลือ:
grep --help | grep invert
-v, - สลับการจับคู่เลือกบรรทัดที่ไม่ตรงกัน
-v
/--invert-match
จะไม่จำเป็นต้องพลิกว่ารหัสที่ส่งคืนของgrep
บ่งชี้ว่าการดำเนินการที่ประสบความสำเร็จ แต่จะตรงกับบรรทัดที่จะไม่ตรงกัน ผู้ที่กำลังมองหาที่จะกลับรหัสส่งคืน (เช่นประสบความสำเร็จถ้าทุกสายไม่ตรงกับรูปแบบมากกว่าที่หนึ่งน้อย)! grep
ควรใช้ พบว่าใช้ในการแสดงออกตามเงื่อนไขเช่น:if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi
.