Web oficial de Ag: http://geoff.greer.fm/ag/ / https://github.com/ggreer/the_silver_searcher
Ventajas de Ag sobre grep y Ack.
Compilar / instalar The Silver Searcher (Ag) en Centos / RedHat.
Descargar Ag de http://geoff.greer.fm/ag/, instalar dependencias, compilar e instalar.
yum -y install pcre-devel xz-devel yum -y groupinstall "Development Tools" tar -zxvf the_silver_searcher-0.29.1.tar.gz cd the_silver_searcher-0.29.1 ./configure make make install
En la mayoría de distribuciones populares “The Silver Searcher” (Ag) se encuentra en los repositorios.
ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]
NOTA1: Las opciones -A y -B no funcionan en stream (ej. comando | ag -A 5 texto). Patrón = Texto o Expresión regular.
NOTA: El fichero .agignore utiliza los mismos patrones que .gitignore y .hgignore. Su uso puede mejorar drásticamente las velocidades de búsqueda.
Múltiples búsquedas en un solo comando (|).
ag --silent -z -C --column --stats --ignore /Desktop/ --ignore /prueba/ "perf interrupt took too long|r8169"
--actionscript .as .mxml --ada .ada .adb .ads --asm .asm .s --batch .bat .cmd --cc .c .h .xs --cfmx .cfc .cfm .cfml --clojure .clj .cljs .cljx --coffee .coffee --cpp .cpp .cc .C .cxx .m .hpp .hh .h .H .hxx --csharp .cs --css .css --delphi .pas .int .dfm .nfm .dof .dpk .dproj .groupproj .bdsgroup .bdsproj --elisp .el --erlang .erl .hrl --fortran .f .f77 .f90 .f95 .f03 .for .ftn .fpp --gettext .po .pot .mo --go .go --groovy .groovy .gtmpl .gpp .grunit --haml .haml --haskell .hs .lhs --hh .h --html .htm .html .shtml .xhtml --ini .ini --jade .jade --java .java .properties --js .js --json .json --jsp .jsp .jspx .jhtm .jhtml --less .less --liquid .liquid --lisp .lisp .lsp --lua .lua --m4 .m4 --make .Makefiles .mk .mak --markdown .markdown .mdown .mdwn .mkdn .mkd .md --mason .mas .mhtml .mpl .mtxt --matlab .m --mercury .m .moo --objc .m .h --objcpp .mm .h --ocaml .ml .mli .mll .mly --octave .m --parrot .pir .pasm .pmc .ops .pod .pg .tg --perl .pl .pm .pm6 .pod .t --php .php .phpt .php3 .php4 .php5 .phtml --plone .pt .cpt .metadata .cpy .py --python .py --rake .Rakefiles --rs .rs --ruby .rb .rhtml .rjs .rxml .erb .rake .spec --rust .rs --salt .sls --sass .sass .scss --scala .scala --scheme .scm .ss --shell .sh .bash .csh .tcsh .ksh .zsh --smalltalk .st --sql .sql .ctl --stylus .styl --swift .swift --tcl .tcl .itcl .itk --tex .tex .cls .sty --tt .tt .tt2 .ttml --vala .vala .vapi --vb .bas .cls .frm .ctl .vb .resx --verilog .v .vh .sv --vhdl .vhd .vhdl --vim .vim --xml .xml .dtd .xsl .xslt .ent --yaml .yaml .yml
Señalar con colores en tiempo real patrones de texto en un fichero de log
tail -f file.log | ag --passthrough --stats "perf interrupt took too long|r81[3-6]..0" [53491.479471] ag:18165 conflicting memory types f7800000-f7c00000 uncached-minus<->write-combining [53491.479475] reserve_memtype failed [mem 0xf7800000-0xf7bfffff], track uncached-minus, req uncached-minus [90621.726661] r8169 0000:02:00.0 enp2s0: link down [90754.138154] r8169 0000:02:00.0 enp2s0: link up [90768.535810] r8169 0000:02:00.0 enp2s0: link down [90798.978197] r8169 0000:02:00.0 enp2s0: link up [95513.515165] capability: warning: `VirtualBox' uses 32-bit capabilities (legacy support in use) [95526.938865] device enp2s0 entered promiscuous mode [126961.783618] perf interrupt took too long (2502 > 2495), lowering kernel.perf_event_max_sample_rate to 50100
Ejecutar comandos sobre los ficheros que tengan un determinado patrón de texto (“arreglar”).
ag -l arreglar *.txt | xargs file ext4pocho.txt: UTF-8 Unicode text ext4pocho2.txt: UTF-8 Unicode text # Sin usar --null y xargs -0 (No funciona porque espera el separador "0"). ag -l arreglar *.txt | xargs -0 file ext4pocho.txt ext4pocho2.txt : cannot open "ext4pocho.txt\012ext4pocho2.txt\012" (No such file or directory) # Usando --null y xargs -0 (Funciona). ag --null -l arreglar *.txt | xargs -0 file ext4pocho.txt: UTF-8 Unicode text ext4pocho2.txt: UTF-8 Unicode text
Buscar código con caracteres especiales en ficheros.
# No funcionará ya que interpreta la cadena como un expresión regex ag 'for var1 in "$@"' prueba.sh # Este sería el uso correcto, si se quieren sacar estadísticas --stats. ag -Q 'for var1 in "$@"' prueba.sh --stats 5:for var1 in "$@" 1 matches 1 files searched 118 bytes searched 0.010859 seconds