Portál AbcLinuxu, 26. dubna 2024 02:48


Dotaz: Bash příkaz na hledání části kodu

10.10.2014 09:54 BMWdejf
Bash příkaz na hledání části kodu
Přečteno: 320×
Odpovědět | Admin
Zdravím všechny, potřeboval bych pomoct s bash příkazem, který by prohledával soubory s určitou příponou třeba "*.less" a v případě, že by v něm našel část mnou hledaného kódu vypsal mi jen cestu k danému souboru kde část kódu je.

Věřím, že pro někoho to bude hračka napsat tento jednoduchý příkaz.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.10.2014 10:04 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mrkni na

man grep - parametry pro nastavení způsobu výpisu výsledků

man find - věci kolem parametru name a exec

Pokud jsou soubory jen v jednom adresáři, můžeš jen použít globbing (tj. *.less) pro grep bez findu

Příp. pokud ti nevadí, že grep bude hledat vše, můžeš prohledat vše přes rgrep a jím vypisované soubory vyfiltrovat (grep za rourou) přes koncovku .less.

Spoustu různých cest a když se s nimi seznámíš, než příště napíšeš text to poradny, budeš mít výsledek několikrát hotový.
10.10.2014 11:44 Sten
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
find adresář -name '*.less' -exec grep -q 'kód' {} \; -print
10.10.2014 12:13 BMWdejf
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
super skvělé Sten :) to jsem přesně potřeboval já jsem si sice napsal něco podobného find -type f -name "*.less" | egrep -lr "kód" adresář

což mi taky fungovalo ale tvůj kód je mnohem lepší :)

Díky
10.10.2014 17:41 rws
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
A jako vzdy na Linux plati TIMTOWTDI, ja pouzivam radeji:

find DIR -name '*.less' -type f -print0 | xargs -0r grep ....

na rozdil od -exec grep spousti xargs ten grep s vetsim mnozstvim nalezenych souboru najednou, kdezto -exec grep spousti pokazde novy grep s tim jednim nalezenym souborem.
10.10.2014 17:53 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu

Vždyť se to dá snadno vyřešit takto:

find adresář -name '*.less' -exec grep -q 'kód' {} + -print

Nechápu, proč je u příkazu find pořád v módě středník, ač v 99% případů ve skutečnosti chcete použít plus.

10.10.2014 12:27 Filip Jirsák
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud nepotřebujete procházet podadresáře, stačí:
grep -l 'vzor' *.less
Pokud chcete hledat i v podadresářích, dalo by se v zsh použít toto, nevím, zda něco takového umí i bash:
grep -l 'vzor' **/*.less
A nebo pak použít find, jak už bylo napsáno. Nebo v případě, kdy by těch souborů bylo moc a příkazová řádka grepu po rozbalení žolíků shellem moc dlouhá.
10.10.2014 12:32 Ilmarinen | skóre: 8 | blog: Mizantropův depresivní kout | Kalevala
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Rekurzivní grep (přepínač -r) s číslováním řádků výskytu (-n)

[ilmarinen@kalevala ~]$ grep -nr --include "*.less" hledany_string
directory/test2.less:1:hledany_string
test.less:1:hledany_string
10.10.2014 12:37 Ilmarinen | skóre: 8 | blog: Mizantropův depresivní kout | Kalevala
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
Jestli chceš vypsat jen cestu k souboru, tak

[ilmarinen@kalevala ~]$ grep -rl --include "*.less" hledaný_string
directory/test2.less
test.less

wamba avatar 11.10.2014 01:12 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Bash příkaz na hledání části kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
já bych použil ack (někde se to jmenuje ack-grep)
ack  -l 'code' --less
This would have been so hard to fix when you don't know that there is in fact an easy fix.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.