Quiero hablar sobre una utilidad de búsqueda que simplifica enormemente la vida. Cuando llego al servidor y necesito buscar algo, lo primero que hago es verificar si ack está instalado. Esta utilidad es un gran reemplazo para grep, así como find y wc hasta cierto punto. ¿Por qué no grep? Ack tiene configuraciones más bonitas de fábrica, más opciones legibles para los humanos, clientes habituales y un sistema de configuración. Si amas(Tiene que) busca a través del terminal, entonces definitivamente deberías probarlo.
Caracteristicas basicas
Ack es recursivo por defecto, y escribir menos opciones siempre es bueno.
Podemos usar la bandera -w para indicarle a la utilidad que busque una instancia de nuestra plantilla, rodeada de límites de palabras (espacios en blanco, una barra diagonal, etc.).
ack -w mysql
![](https://habrastorage.org/webt/ap/pe/_i/appe_i1zeu4dmh-hshiivhxjn5c.png)
Ack admite búsquedas de tipo de archivo. Por ejemplo, busque la versión del módulo en archivos json.
ack --json '"version":\s+"\d+\.\d+\.\d+"'
![](https://habrastorage.org/webt/wi/2x/fu/wi2xfuawt6edxkl0oe4eg0qtbto.png)
Puede encontrar una lista completa de los tipos de archivos compatibles con:
ack --help-types
A menudo es necesario calcular cuántas veces aparece una frase en un archivo de registro, por ejemplo, para comprender cuántos datos procesó el script.
![](https://habrastorage.org/webt/xy/7j/5a/xy7j5a6fgp25raocnohxbr7bk3o.png)
Contamos cuántas veces ocurre el proceso en el archivo test.log, no distingue entre mayúsculas y minúsculas ( -i ).
, . mysql: - (-) *.js (--js), (-h) .
ack --js -w mysql
ack --js -wch mysql
![](https://habrastorage.org/webt/eg/b2/8g/egb28gobj9itdersa8rwgfyly7k.png)
, - (-l)
ack --js -w -cl mysql
![](https://habrastorage.org/webt/bg/4-/3_/bg4-3_ntd8xjni92wf51jpkzmca.png)
c, ack
(-B) (-A) . - , .
ack --js --column -B 2 "query.once\('" ./lib/
![](https://habrastorage.org/webt/o5/f4/5c/o5f45cgs_fmeawirb0xt3s2jtlq.png)
ack --js --column -A 2 "query.once\('" . /lib/
![](https://habrastorage.org/webt/01/_0/iw/01_0iwlhtoe6pnahjcmwe1yfuc0.png)
, (-)
ack --js --column -C 2 "query.once\('" ./lib/
(-v) , . .
Ack grep Perl .
, .
ack 'var\s+add\s+'
![](https://habrastorage.org/webt/3s/5y/ls/3s5ylses8iqp_ulhktjdluloy-q.png)
ack '\*\s+\[v\d+\.\d+\.\d+\]'
![](https://habrastorage.org/webt/ml/so/5x/mlso5xgrz_jq3kbnxnw-vzvb-cc.png)
, . --output (-o)
ack -o '\*\s+\[v\d+\.\d+\.\d+\]'
![](https://habrastorage.org/webt/a6/yg/z2/a6ygz2_gof_4vk5q0eanxjqcvo8.png)
, output $[ ]. ,
ack --output='version is $1' '\*\s+\[v(\d+\.\d+\.\d+)\]'
![](https://habrastorage.org/webt/r2/yh/6f/r2yh6fr1gqr-cnbyqiddyxgw9uu.png)
Ack --range-start --range-end. ,
, .
, sql
![](https://habrastorage.org/webt/it/8n/um/it8num1htv937uprvsl735a8ydq.png)
. SELECT, FROM.
ack --range-start ^SELECT --range-end ^FROM 't\d+\.' ./test.sql
![](https://habrastorage.org/webt/wt/w2/m-/wtw2m-ml2lpp4cwq6dewyadu1am.png)
, , \, -Q.
ack --json 'mysql\.'
ack --json -Q mysql.
![](https://habrastorage.org/webt/bg/op/ff/bgopffzlbuz0wce8tvfjsnm6ppi.png)
ack -f --js
![](https://habrastorage.org/webt/7j/js/g-/7jjsg-pep5tzrqeckfvwbypysma.png)
js P*, (-g).
ack -g --js '\/Pa.+.js$'
![](https://habrastorage.org/webt/xu/c0/9s/xuc09s7pkujclvjunutl7qdy-qy.png)
. (~/.ackrc), ( .ackrc).
, . .
--ignore-dir=dist
--vue.
--type-add=vue:ext:js,vue
--vue, .vue. : ack --vue App.
. , --vue .js .
, , *.min.js
--ignore-file=match:/\.min\.js$/
CentOS
yum update -y && yum install ack -y
Ubuntu
apt-get update -y && apt-get install ack-grep -y
Mac OS
brew update && brew install ack
curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack
:
. , :
ack –-help
ack --man
ack . pipeline (ack -C 10 hello | ack world) .