Jeg vil gjerne liste opp filene rekursivt og unikt som inneholder det gitte ordet.

Eksempel : Å sjekke om ordet «sjekk», jeg gjør normalt sett en grep

$ grep check * -R 

Men da det er mange forekomster av dette ordet, får jeg mye utgang. Så jeg trenger bare å liste opp filnavnene som inneholder det gitte søkeordet. Jeg antar at noe triks med find og xargs vil være tilstrekkelig her, men ikke sikker.

Noen ideer?

Svar

Bruk -l eller --files-with-matches alternativ som er dokumentert som følger:

Undertrykk normal utgang; i stedet skriver du ut navnet på hver inndatafil som utdata normalt ville blitt skrevet ut fra. Skanningen stopper ved første kamp. (-l er spesifisert av POSIX.)

Så for eksempelet ditt kan du bruke følgende:

$ grep check * -lR 

Kommentarer

  • Fungerer også på MSYS. Flott!
  • Jeg brukte grep -rl "text to find" "/usr/share" og det fungerte bra!

Svar

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

Du vil sannsynligvis ikke bruke alternativet -R som med moderne versjoner av GNU grep følger symlenker når kataloger synker. Bruk alternativet -r i stedet der som siden versjon 2.12 (april 2012) ikke lenger følger symlinker.

Hvis grep ikke er GNU-en, eller er eldre enn versjon 2.12, eller hvis du trenger koden din for å være bærbar til ikke-blødende GNU-systemer, bruk find kommando ovenfor.

Ellers kan du gjøre:

grep -rl check . 

Ikke bruk * (da det ville utelate skjulte filer i den gjeldende katalogen (og bare i den gjeldende katalogen) og ville forårsake problemer for filer hvis navn starter med en -), unngå å sende alternativer etter argumenter som det ikke er garanti tenkt å jobbe avhengig av miljøet og er ikke bærbar.

Svar

Prøv dette:

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

Når det gjelder grep flaggene …

-c vil returner et filnavn etterfulgt av: og et tall som indikerer hvor mange ganger søkestrengen vises i den gitte filen.

-v tar utdata fra den første grep søk, filtrer ut filene med null resultater, og skriv ut bare filene med resultater som ikke er null.

Kommentarer

  • Dette får en falsk negativ hvis du har fil (er) (eller regissør (er)) hvis navn inneholder :0. Det ' er bedre å gjøre grep -v ':0$'. Selv det vil kveles av stienavn som inneholder nye linjer.

Svar

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

f.eks. grep -lR "NAVIGATE" . der vi finner ordet NAVIGATE i . i gjeldende katalog.

Svar

grep -rin «whatToFind» locationToFInd

f.eks $ grep -rin «vihaan».

vil rekursivt søke og liste opp filnavn og de tilsvarende linjene som har «vihaan» i seg, «.» refererer til gjeldende katalog.

Svar

find . -type f | grep "keyword" * 

søk i gjeldende katalog. For å slå opp fra roten, spesifiser / i stedet for .

Svar

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

Gi deg listen over .q filer inneholder nøkkelordet trim

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *