Portál AbcLinuxu, 5. května 2025 18:27

Dotaz: Hledání řetězce v souborech

2.4.2013 14:08 Jura
Hledání řetězce v souborech
Přečteno: 8458×
Odpovědět | Admin
Dobrý den vespolek.

Je nějaký jednodušší způsob jak hledat určitý řetězec v souborech než tento dlouhý sled příkazů ?

find / -type f -iname '*.php' -exec grep -i 'hledaný textXY' {} \; -print0

Děkuji za napovězení

Jura
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.4.2013 14:15 Kit
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
Používám odlehčenější verzi, která však funguje mírně odlišně:
grep -i 'hledaný textXY' *.php
případně
grep -i 'hledaný textXY' */*.php
apod. Neprohledává sice adresářový strom do hloubky, ale pro mé účely vyhovuje.
2.4.2013 14:34 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
A když místo grep dáš rgrep, bude prohledávat i v podadresářích.
2.4.2013 15:00 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
U GNU grepu, který je v linuxu obvyklý, stačí použít přepínač -r
2.4.2013 15:04 Kit
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
To není tak jednoznačné. grep -r sice běžně používám, ale
rgrep -i 'hledany string' *.php
v podadresářích hledat nebude. Nemá jejich názvy.
2.4.2013 15:12 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
grep(1):
       --include=GLOB
              Search  only  files whose base name matches GLOB (using wildcard
              matching as described under --exclude).
2.4.2013 16:13 Kit
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Než bych hledal všechny atributy grepu, asi bych v takových případech raději použil find z původního dotazu.

Jinak ale dobré, jen bych uvítal kratší zápis parametru.
grep -ri 'hledaný textXY' --include="*.php" /
bude zřejmě odpovědí na původní dotaz.
2.4.2013 15:13 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Jasně, obvykle hledám v celém podstromu, koncovka mě nepálí. Takže typicky

rgrep něco /etc
2.4.2013 16:02 Kit
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Takže ve stromu prolezeš i všechny multimediální soubory. Poněkud nepraktické a mimo /etc (ve kterém toho z PHP asi moc nebude) zřejmě i lenošné.
2.4.2013 17:53 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
A ty máš multimediální soubory namíchané mezi php skripty?

Když hledám, tak vím, kde co přibližně mám. Budu-li hledat text mezi velkými binárkami, nepoužiji rgrep. To dá rozum.
Tarmaq avatar 2.4.2013 19:09 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
z tazatelova dotazu je zrejme, ze hleda PHP soubory od rootu, takze je opravdu zbytecne prochazet vsechny soubory nezavisle na tom zda obsahuji binarni data..
Don't panic!
2.4.2013 19:20 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Tak to jo, toho jsem si nevšiml. Hledat od rootu mě nějak nenapadlo :)
3.4.2013 09:15 Kit
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Samozřejmě. A mám tam i databáze a šablony, které grepem prolézat nechci.
3.4.2013 11:38 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Pokud není dat mnoho (gigabajty), používám rgrep napřímo i za cenu pár false positives. Než odladím filtr přes koncovky, mám to dávno nalezené. Nebo výstup rgrepu přefiltruji grepem na php (v názvu souboru na začátku řádku lezoucího z rgrepu) a dále tím zredukuji false positives.

Nikomu tenhle postup nenutím, jen se mi osvědčil a používám několikrát denně, protože to mám hotové nejrychleji a vím, že to dělá, přesně co chci. Když jde o větší strom s daty, pustím si to třeba v mc, snadno se pak skáče rovnou do nalezených souborů na místo s výskytem hledaného textu. Zápis execu ve findu mi nevyhovuje, příliš dlouho jej musím testovat. Ale jak říkám, každému sedí něco jiného. A tak to má být :)
3.4.2013 15:17 potato
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Přesně naopak: nehledám-li v něčem, co může být čerstvé a ještě nezacachované locate, neprocházím strom vůbec, o grepu v celém stromu ani nemluvě:
locate -0 '*.php' | xargs -0 grep foobar
3.4.2013 19:05 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Hezká vychytávka. Vyžaduje to však zapnutou indexaci locate, což např. na našich debianích serverech není.
6.2.2015 04:53 ďobo
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
find . | xargs grep 'neco' -l
2.4.2013 19:53 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
Místo \; bych dal + a grepu bych přihodil parametr -q, ať se nemíchá s výstupem findu.
3.4.2013 23:30 dik
Rozbalit Rozbalit vše Re: Hledání řetězce v souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
grep -irl 'hledany text' /muj/dir

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.