คำตอบที่ปลอดภัยข้ามการกระจาย (รวม windows minGW?)
grep -h "[[:alpha:]]*th[[:alpha:]]*" 'filename' | tr ' ' '\n' | grep -h "[[:alpha:]]*th[[:alpha:]]*"
หากคุณใช้ grep เวอร์ชันเก่า (เช่น 2.4.2) ซึ่งไม่รวมถึงตัวเลือก -o ใช้ข้างต้น อื่นใช้ง่ายกว่าในการรักษารุ่นด้านล่าง
Linux การกระจายข้ามคำตอบที่ปลอดภัย
grep -oh "[[:alpha:]]*th[[:alpha:]]*" 'filename'
เพื่อสรุป-oh
ผลลัพธ์นิพจน์ทั่วไปที่ตรงกับเนื้อหาไฟล์ (ไม่ใช่ชื่อไฟล์) เช่นเดียวกับที่คุณคาดหวังว่านิพจน์ทั่วไปจะทำงานใน vim / etc ... คำหรือนิพจน์ทั่วไปที่คุณต้องการค้นหานั้นขึ้นอยู่กับ คุณ! ตราบใดที่คุณยังคง POSIX และไม่ใช้ไวยากรณ์ (ดูด้านล่าง)
เพิ่มเติมจากคู่มือสำหรับ grep
-o Print each match, but only the match, not the entire line.
-h Never print filename headers (i.e. filenames) with output lines.
-w The expression is searched for as a word (as if surrounded by
`[[:<:]]' and `[[:>:]]';
สาเหตุที่คำตอบดั้งเดิมไม่ได้ผลสำหรับทุกคน
การใช้\w
แตกต่างกันไปในแต่ละแพลตฟอร์มเนื่องจากเป็นไวยากรณ์ "perl" แบบขยาย เช่นผู้ที่ติดตั้ง grep ที่มีข้อ จำกัด ในการทำงานกับ POSIX ชั้นเรียนตัวอักษรการใช้งาน[[:alpha:]]
และไม่เทียบเท่า Perl \w
ของ ดูหน้า Wikipedia เกี่ยวกับการแสดงออกปกติสำหรับข้อมูลเพิ่มเติม
ท้ายที่สุดคำตอบ POSIX ด้านบนจะมีความน่าเชื่อถือมากกว่าโดยไม่คำนึงถึงแพลตฟอร์ม (เป็นต้นฉบับ) สำหรับ grep
สำหรับการสนับสนุน grep ที่ไม่มีตัวเลือก -o grep แรกจะส่งออกบรรทัดที่เกี่ยวข้อง tr จะแยกช่องว่างกับบรรทัดใหม่ตัวกรอง grep สุดท้ายสำหรับบรรทัดที่เกี่ยวข้องเท่านั้น
(PS: ฉันรู้ว่าแพลตฟอร์มส่วนใหญ่ในตอนนี้จะได้รับการติดตั้งสำหรับ \ w .... แต่มีที่ล้าหลังอยู่เสมอ)
เครดิตสำหรับวิธีแก้ปัญหา "-o" จากคำตอบ @AdamRosenfield