ฉันจะแสดงชื่อไฟล์หลังจากค้นหาคำหลักได้อย่างไร


15

ปัจจุบันฉันมีไฟล์ข้อมูล n ไฟล์ในไดเรกทอรีซึ่งแต่ละไฟล์มีข้อมูลยาวที่สุด 1 บรรทัด โครงสร้างไดเรกทอรีของฉันคือ

director/
    data1.json
    data2.json
    data3.json

ฉันรู้ว่าอย่างน้อยหนึ่งไฟล์เหล่านั้นมีคำหลักที่ฉันกำลังมองหา แต่เนื่องจากข้อมูลหนึ่งบรรทัดยาวเกินไปจึงครอบคลุมเทอร์มินัลทั้งหมดของฉัน ฉันจะได้รับชื่อไฟล์หลังจากดำเนินการ grep คำหลักได้อย่างไร คำสั่ง grep ที่ฉันใช้คือ:

grep keyword *.json

คำตอบ:


30

อาร์กิวเมนต์ -l ควรทำในสิ่งที่คุณต้องการ

   -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

7

คุณสามารถใช้ xargs ร่วมกับ --null กับ grep หรือ --print0 กับ ack ฉันพบว่าความเร็วแอ๊นั้นเร็วกว่า

grep -lr --null searchterm * | xargs -I {} -0 echo {}

ack -lr --print0 searchterm * | xargs -I {} -0 echo {}

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