--## vi: sw=2:iminsert=1 --## leave this blank lines here --center Intimando con grep-dctrl --author Adeodato Simó --date Coruña, 2008-05-03 --## --newpage --heading Presentando al prota * Name /usr/bin/grep-dctrl, paquete 'dctrl-tools' * Utility Hacer "queries" tipo base de datos contra ficheros en formato RFC822: - Sources.gz - Packages.gz - /var/lib/apt/lists/* * Ejemplos - qué paquetes dependen de libgconf2-4: (a) en el archivo (b) en mi sistema - qué paquetes son arch:any, pero no dependen de libc6 --## --newpage --heading Amiguetes * dctrl-tools añade a /usr/bin estos binarios: - grep-status => equivalente a `cat /var/lib/dpkg/status | grep-dctrl ...` - grep-available => cat /var/lib/dpkg/available | ... - grep-aptavail => apt-cache dumpavail | ... * define your own, eg.: % ln -s /usr/bin/grep-dctrl ~/bin/grep-sid-src % cp /etc/grep-dctrl.rc ~/.grep-dctrlrc # sigh... % cat >> ~/.grep-dctrlrc grep-sid-src /var/lib/apt/lists/..._sid_main_source_Sources --## --newpage --heading Toma de contacto: grep orientado a párrafos * Queremos leer las descripciones largas de todos los paquetes que mencionen "markdown": % apt-cache search markdown Imprime el nombre y la descripción corta... now what? --- % grep markdown /var/lib/dpkg/available Imprime solo las líneas que matchean... --- % grep-available markdown Imprime párrafos enteros, incluyendo las descripciones => Sin argumentos, grep-dctrl matchea anywhere in the paragraph, e imprime los párrafos completos --## --newpage --heading Limitando dónde buscar: -F % grep-available -F Depends markdown --- % grep-available -F Maintainer,Uploaders "Luk Claes" --- Q: That invocation won't really work: why? anybody? --- A: /var/lib/dpkg/available no incluye el Uploaders field: % grep-sid-src -F Maintainer,Uploaders "Luk Claes" => Make sure that what are you grepping against is correct. --- % grep-status -F Package python --- "-F Package" is so common que hay un shortcut: % grep-status -P python - NB: both match /.*python.*/ --## --newpage --heading Limitando qué mostrar: -s % grep-available -F Depends markdown -s Package Package: ikiwiki Fields passed to -s are case insensitive, sort of: % grep-available -F Depends markdown -s package package: ikiwiki --- * Para imprimir sólo los valores de los campos y no su nombre: -n % grep-status -F Section 'non-free' -n -s package | grep python python-profiler --- * Para imprimir varios campos, comas: % grep-sid-src -P mlocate -s Maintainer,Uploaders Maintainer: Adeodato Simó Uploaders: Thomas Jollans --## --newpage --heading Fine tuning matches: -X, -e * Exact matching % grep-sid-src -P gforge -ns Maintainer vs % grep-sid-src -X -P gforge -ns Maintainer --- * Expresiones regulares: -e % grep-available -P -e '^python-' -ns package % grep-available -P -e '[^0-9.]9$' -ns package --## --newpage --heading Logical operations: -a (AND), -o (OR), --not * Operadores lógicos, sin sorpresas: % grep-available -P -e 'dbg$' \ -a --not -F Priority extra -ns package --- * Oh, that matches "kdbg" and "kxsldbg", let's fix: % grep-available -P -e '-dbg$' \ ^ -a --not -F Priority extra -ns package grep-available: invalid option -- b Try `grep-available --help' or `grep-available --usage' for more information. ==> --patern to the rescue: % grep-available -P -e --pattern '-dbg$' \ -a --not -F Priority extra -ns package --## --newpage --heading Inheritance from /bin/grep: -c, -v, -i * Opciones con el mismo significado que en grep: -c, --count: just print el total de matches % grep-available -FMaintainer debian-qt-kde@lists.debian.org -c 709 -v, --invert-match: print stuff that does NOT match (can just be doing using --not wisely...) -i, --ignore-case: make matches case insensitive --## --newpage --heading Los dos puntos y -S * Say libpoppler2 bumps SONAME, let's get a list of what to binNMU: % grep-available -FDepends libpoppler2 -ns package --- * Bah, that prints binary packages, we need source packages... % grep-available -FDepends libpoppler2 -ns source Ups, empty lines wtf? --- * If binpkg == srcpkg, there is no Source: header... colon ftw! % grep-available -FDepends libpoppler2 -ns source:package * Works for -F too, eg. list of binary packages of kdebase: % grep-available -FSource:Package kdebase -ns package * Again, Source:Package is so common that we have -S for that --## --newpage --heading Final bits * Para que grep-available funcione guay, cron /usr/sbin/sync-available * Other binaries in dctrl-tools: - sort-dctrl - tbl-dctrl - join-dctrl --- * Any questions?