Lista plików zawierających określone słowo w tekście


30

Chciałbym wymienić rekursywnie i jednoznacznie pliki zawierające dane słowo.

Przykład : Sprawdzanie słowa „czek”, normalnie robię to grep

$ grep check * -R

Ale ponieważ występuje wiele słów tego słowa, otrzymuję wiele wyników. Muszę więc tylko wymienić nazwy plików zawierające podane słowo wyszukiwania. Wydaje mi się, że wystarczy sztuczka findi xargswystarczyłaby tutaj, ale nie jestem pewien.

Jakieś pomysły?

Odpowiedzi:


39

Użyj opcji -llub --files-with-matches, która jest udokumentowana w następujący sposób:

Pomiń normalne wyjście; zamiast tego wypisz nazwę każdego pliku wejściowego, z którego normalnie wydrukowano by wyjście. Skanowanie zatrzyma się przy pierwszym dopasowaniu. ( -ljest określony przez POSIX).

Na przykład możesz użyć:

$ grep check * -lR

Działa również na MSYS. Świetny!
Kos

2
Użyłem grep -rl "text to find" "/usr/share"i działało świetnie!
Shrout1

18
find . -type f -exec grep -l check {} +

Prawdopodobnie nie chcesz używać -Ropcji, która w nowoczesnych wersjach GNU greppodąża za dowiązaniami symbolicznymi podczas zstępujących katalogów. -rZamiast tego skorzystaj z opcji, która od wersji 2.12 (kwiecień 2012 r.) Nie korzysta już z dowiązań symbolicznych.

Jeśli twój grep nie jest GNU, lub jest starszy niż wersja 2.12, lub jeśli potrzebujesz, aby twój kod był przenośny w systemach GNU, które nie są tak zaawansowane, użyj findpowyższej komendy.

W przeciwnym razie możesz wykonać:

grep -rl check .

Nie używaj *(ponieważ pomijałoby to ukryte pliki w bieżącym katalogu (i tylko w bieżącym katalogu) i powodowałoby problemy dla plików, których nazwa zaczyna się na a -), unikaj przekazywania opcji po argumentach, ponieważ nie ma gwarancji, że będzie działać w zależności od środowisko i nie jest przenośny.


1

Spróbuj tego:

find . -type f | xargs grep -c check $1 | grep -v ":0"

Jeśli chodzi o grepflagi ...

-c zwróci nazwę pliku, po której następuje: oraz liczbę wskazującą, ile razy szukany ciąg pojawia się w danym pliku.

-vpobierze dane wyjściowe z pierwszego grepwyszukiwania, odfiltruje pliki z zerowymi wynikami i wydrukuje tylko pliki z niezerowymi wynikami.


Otrzymasz fałszywy negatyw, jeśli masz plik (i) lub reżyser (y), których nazwy zawierają :0. Lepiej to zrobić grep -v ':0$'. Nawet to dusi się w ścieżkach zawierających znaki nowej linii.
Scott

0

grep -rin "whatToFind" locationToFInd

np. $ grep -rin "vihaan".

będzie rekurencyjnie wyszukiwać i wyświetlać nazwy plików oraz odpowiadające im wiersze, które zawierają „vihaan”, „.” odnosi się do bieżącego katalogu.


0
find . -type f | grep "keyword" *

szukaj w bieżącym katalogu. Aby wyszukać z katalogu głównego, określ /zamiast.


0

grep -lR "text-to-find" <where-to-find> działa również dobrze.

np. grep -lR "NAVIGATE" .gdzie znajdujemy słowo NAVIGATEw .bieżącym katalogu.


-2
 grep -rli trim \` find . -name *.q \` 

Daje ci listę .qplików zawierających słowo kluczowetrim

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.