Jeg vil gerne liste de filer rekursivt og entydigt, der indeholder det givne ord.

Eksempel : At kontrollere ordet “check”, jeg normalt gør er en grep

$ grep check * -R 

Men da der er mange forekomster af dette ord, får jeg en masse output. Så jeg skal bare liste de filnavne, der indeholder det givne søgeord. Jeg antager, at et trick med find og xargs ville være nok her, men ikke sikker.

Har du nogen ideer?

Svar

Brug -l eller --files-with-matches option, der er dokumenteret som følger:

Undertryk normal output; Udskriv i stedet navnet på hver inputfil, hvorfra output normalt ville være blevet udskrevet. Scanningen stopper ved den første kamp. (-l er specificeret af POSIX.)

Så for dit eksempel kan du bruge følgende:

$ grep check * -lR 

Kommentarer

  • Fungerer også på MSYS. Fantastisk!
  • Jeg brugte grep -rl "text to find" "/usr/share" og det fungerede godt!

Svar

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

Du vil sandsynligvis ikke bruge -R som med moderne versioner af GNU grep følger symlinks ved nedadgående mapper. Brug -r i stedet der, som siden version 2.12 (april 2012) ikke længere følger symlinks.

Hvis din grep ikke er GNU-en, eller er ældre end version 2.12, eller hvis du har brug for din kode for at være bærbar til ikke-blødende GNU-systemer, skal du bruge find -kommandoen ovenfor.

Ellers kan du gøre:

grep -rl check . 

Brug ikke * (da det ville udelade skjulte filer i den aktuelle mappe (og kun i den aktuelle mappe) og ville forårsage problemer for filer, hvis navn starter med en -), undgå at sende muligheder efter argumenter, da det ikke er garanti teed til at arbejde afhængigt af miljøet og er ikke bærbar.

Svar

Prøv dette:

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

Hvad angår grep flag …

-c returner et filnavn efterfulgt af: og et tal, der angiver, hvor mange gange søgestrengen vises i den givne fil.

-v tager output fra den første grep søg, filtrer filerne ud med nul resultater, og udskriv kun filerne med ikke-nul resultater.

Kommentarer

  • Dette får en falsk negativ, hvis du har fil (er) (eller instruktør (er)), hvis navne indeholder :0. Det ' er bedre at gøre grep -v ':0$'. Selv det vil kvæle stier, der indeholder nye linier.

Svar

grep -lR "text-to-find" <where-to-find> fungerer også fint.

f.eks. grep -lR "NAVIGATE" . hvor vi finder ordet NAVIGATE i . i den aktuelle mappe.

Svar

grep -rin “whatToFind” locationToFInd

f.eks. $ grep -rin “vihaan”.

søger og lister rekursivt på filnavne og de tilsvarende linjer, der har “vihaan” i sig, “.” henviser til den aktuelle mappe.

Svar

find . -type f | grep "keyword" * 

søgning i den aktuelle mappe. For at slå op fra rod skal du angive / i stedet for .

Svar

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

Giv dig listen over .q filer indeholder nøgleordet trim

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *