Portál AbcLinuxu, 3. července 2025 17:49
Do you speek Bash? (alebo "hovoríte bashom?") Ja áno a to už pár rokov. Počnúc týmto dielom sa o zopár svojich užitočných skriptov podelím aj s ostatnými Abíčkármi.
Nasledujúci skript rekurzívne vyhľadáva súbori, v ktorých sa nachádza hľadaný výraz. Nič výnimočné, ale programátori ocenia, že sa dokáže vyhýbať adresárom 'CVS' (viem, ani to nie je nič moc, ale... vie vypísať aj náhľady súborov).
Skript je určený a vyhľadávanie "TODO" poznámok v zdrojových kódoch. Bez parametrov vyhľadá všetky súbori, ktoré obsahujú slovo "TODO".
$ _find_files_with
Viete, že Leoš Literák (zakladateľ a programátor Abíčka) píše "todo" malími písmenami? Viem to, lebo pracujem na zdrojákoch Abíčka (vo voľnom čase) a pre odlíšenie si TODO značím veľkými písmenami. Nakoľko ma Leošove TODO poznámky nezaujímajú, skript je citlivý na veľkosť hľadaného reťazca.
Ak chcete vyhľadávať "bezcitne" k veľkosti písmen, zadajte skriptu _druhý_ argument "-i ":
$ _find_files_with "" "-i"
Tým ale prepíšete ostatné parametre, ktoré skript predáva programu grep
. Takže prídete o zafarbovanie hľadaného reťazca a okolité riadky. Ak tieto fičuri potrebujete používajte niečo takéto:
$ _find_files_with "" "-i -C 3 --colour=always"
Posledný _tretí_ argument slúži jedinému účelu - na zapínanie "CVSfóbie". Ak ako tretí argument zadáte "-cvs", skript sa vyhne všetkým súborom, v ktorých ceste sa nachádza adresár CVS. Mne sa to hodí často, CVS neznášam a používam Cogito (výnimočne Darcs):
$ _find_files_with "" "" "-cvs"
_find_files_with "term" "grep_opts" "-cvs"
grep
. Predvolená hodnota: -C 3 --colour=always
#!/bin/bash
# File: _find_files_with
# Description: Finds files in which occurs given string
term="$1"
grep_opts="$2"
find_opts="! -type d"
if [ "$1" == "" ]; then
term="TODO"
fi
if [ "$2" == "" ]; then
grep_opts="-C 3 --colour=always"
fi
if [ "$3" == "-cvs" ]; then
find_opts="$find_opts -path '*/CVS/*'"
fi
for i in `find $find_opts`; do
if grepped=$(grep "$term" $i $grep_opts); then
echo " >>>> file '$i' contains:"
cat << EOT
$grepped
EOT
echo " <<<<"
echo
fi
done
Tiskni
Sdílej:
syn keyword cTodo contained TODO FIXME XXX
ToDo
:)
...vubec bych doporucil poohlednout se po netu po nejake ucebnici shellu ci nejakych ukazkovych skriptech...
To je ale také smutné .)
grep -r find ... -print0 | xargs -0 ...
find|xargs
nevypíše súbory vo formáte aký vyžadujem. Vlastne som týmto zápisom chcel trochu pozdvihnúť úroveň blogov... možno zajtra dostanem lepšie hodnotenie :(
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.