Chtěl bych vypsat rekurzivně a jednoznačně soubory, které dané slovo obsahují.

Příklad : Kontrola slova „check“, normálně dělám grep

$ grep check * -R 

Ale protože existuje mnoho výskytů tohoto slova, mám spoustu výstupů. Musím tedy vypsat názvy souborů, které obsahují dané hledané slovo. Myslím, že by zde stačil nějaký trik s find a xargs, ale nejsem si jistý.

Nějaké nápady?

Odpověď

Použijte -l nebo --files-with-matches možnost, která je dokumentována následovně:

Potlačit normální výstup; místo toho vytiskněte název každého vstupního souboru, ze kterého by se normálně tiskl výstup. Prohledávání se zastaví při první shodě. (-l je specifikován POSIXem.)

Takže například můžete použít následující:

$ grep check * -lR 

Komentáře

  • Funguje také na MSYS. Skvělé!
  • Použil jsem grep -rl "text to find" "/usr/share" a fungovalo to skvěle!

Odpověď

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

Pravděpodobně nechcete použít možnost -R, která s moderními verzemi GNU grep při sestupném adresáři následuje symbolické odkazy. Místo toho použijte možnost -r, která od verze 2.12 (duben 2012) již symbolické odkazy nedodržuje.

Pokud váš grep není GNU nebo je starší než verze 2.12, nebo pokud potřebujete, aby byl váš kód přenosný do systémů GNU bez krvácení, použijte find výše uvedený příkaz.

Jinak můžete:

grep -rl check . 

Nepoužívejte * (protože by to vynechalo skryté soubory v aktuálním adresáři (a pouze v aktuálním adresáři) a způsobilo by to problémy souborům, jejichž název začíná na -), vyhněte se předávání možnosti po argumentech, protože to není zaručeno fungoval v závislosti na prostředí a není přenosný.

Odpovědět

Zkuste toto:

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

Pokud jde o příznaky grep

-c bude vrátit název souboru následovaný: a číslem udávajícím, kolikrát se hledaný řetězec objeví v daném souboru.

-v převezme výstup z prvního grep hledat, filtrovat soubory s nulovými výsledky a vytisknout pouze soubory s nenulovými výsledky.

Komentáře

  • Toto bude mít falešný zápor, pokud máte soubory (nebo režiséry), jejichž jména obsahují :0. ' Lepší je grep -v ':0$'. I to se udusí u cest, které obsahují nové řádky.

Odpovědět

grep -lR "text-to-find" <where-to-find> funguje také dobře.

např. grep -lR "NAVIGATE" . kde v .NAVIGATE div> v aktuálním adresáři.

Odpověď

grep -rin „whatToFind“ locationToFInd

např. $ grep -rin „vihaan“.

bude rekurzivně vyhledávat a vypisovat názvy souborů a odpovídající řádky, které obsahují „vihaan“, „.“ odkazuje na aktuální adresář.

Odpověď

find . -type f | grep "keyword" * 

hledat v aktuálním adresáři. Chcete-li vyhledat z kořenového adresáře, zadejte / namísto .

Odpovědět

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

Poskytne vám seznam souborů .q, které obsahují klíčové slovo trim

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *