Jak wyświetlać nazwy plików tylko po wyszukiwaniu słowa kluczowego grep?

15

Obecnie mam n plików danych w katalogu, w którym każdy plik ma najwyżej 1 linię bardzo długich danych. Moja struktura katalogów to

director/
    data1.json
    data2.json
    data3.json

Wiem, że co najmniej jeden z tych plików zawiera słowo kluczowe, którego szukam, ale ponieważ jeden wiersz danych jest zbyt długi, obejmuje on cały mój terminal. Jak uzyskać nazwę pliku tylko po wykonaniu słowa kluczowego grep? Polecenie grep, którego używam to:

grep keyword *.json
Thierry Lam
źródło

Odpowiedzi:

30

Argument -l powinien robić, co chcesz.

   -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.)
inne
źródło
7

Możesz używać xargs w połączeniu z --null z grep lub --print0 z ack. Uważam, że prędkość potwierdzenia jest większa.

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

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

insidepower
źródło