ack es mejor que grep

Quiero hablarles de una utilidad de búsqueda que simplifica enormemente la vida. Cuando llego al servidor y necesito buscar algo, lo primero que hago es comprobar si ack está instalado. Esta utilidad es un excelente reemplazo para grep, así como para find y wc hasta cierto punto. ¿Por qué no grep? Ack tiene configuraciones más agradables listas para usar, más opciones legibles para humanos, expresiones regulares de Perl y un sistema de configuración. Si te gusta (tienes que) buscar en la terminal, definitivamente deberías probarlo.

Caracteristicas basicas

Ack es recursivo de forma predeterminada y escribir menos opciones siempre es una buena idea.

Podemos usar una bandera. -wpara indicarle a la utilidad que busque una instancia de nuestro patrón rodeada por límites de palabras (espacios en blanco, barras diagonales, etc.).

ack -w mysql

ack es mejor que grep

Ack admite la búsqueda por tipo de archivo. Por ejemplo, busquemos la versión del módulo en archivos json.

ack --json '"version":s+"d+.d+.d+"'

ack es mejor que grep

Se puede ver una lista completa de los tipos de archivos admitidos usando:

ack --help-types

A menudo es necesario contar cuántas veces aparece una frase en un archivo de registro, por ejemplo, para comprender cuántos datos procesó el script.

ack es mejor que grep
Contamos cuántas veces ocurre el proceso en el archivo test.log, sin tener en cuenta las mayúsculas y minúsculas (-i).

Podemos contar ocurrencias no solo en un archivo específico, sino en un grupo. Finalicemos la búsqueda anterior de la palabra mysql: cuente el número de apariciones de palabras (con) en archivos *.js(--js), excluyendo archivos en los que no se encontró nada (-h) y resumir el resultado.

# выведем на экран все вхождения
ack --js -w mysql
# считаем общую сумму вхождений
ack --js -wch mysql

ack es mejor que grep

Además, podemos obtener un informe detallado sobre el número de ocurrencias en cada archivo usando (-l)

ack --js -w -cl mysql

ack es mejor que grep

Si necesita contexto adicional para su búsqueda, puede preguntar ack
mostrar líneas hasta (-B) y después (-A) de la expresión encontrada. Para hacer esto, debe especificar después de la opción el número de líneas que deben mostrarse.

# 2 строки до 
ack --js --column -B 2 "query.once('" ./lib/

ack es mejor que grep

# 2 строки после 
ack --js --column -A 2 "query.once('" . /lib/

ack es mejor que grep

Y si necesita ambos, utilice (-DE)

ack --js --column -C 2 "query.once('" ./lib/

También hay una opción (-v) para invertir la búsqueda, es decir, mostrar líneas que no contienen un patrón determinado.

Expresión regular

Ack, a diferencia de grep, utiliza expresiones compatibles con Perl.
Para mí esto es una gran ventaja: no tengo que recordar una sintaxis separada para las expresiones regulares.

ack 'vars+adds+'

ack es mejor que grep

Ejemplo más complejo

ack '*s+[vd+.d+.d+]'

ack es mejor que grep

A menudo desea dejar en los resultados sólo lo que coincide con la plantilla. La opción --output ayudará aquí (-o)

ack -o '*s+[vd+.d+.d+]'

ack es mejor que grep

Además, usando paréntesis podemos seleccionar la parte encontrada y acceder a ella en la salida a través de la variable $[número de grupo]. Por ejemplo,

ack --output='version is $1' '*s+[v(d+.d+.d+)]'

ack es mejor que grep

Ack tiene opciones útiles --inicio de rango и --fin de rango. Ellos ayudan cuando
Los datos no se almacenan en una línea, sino en varias líneas.

Por ejemplo, hay un archivo con código sql.

ack es mejor que grep

Extraigamos los nombres de las columnas. El comienzo del bloque será una línea que comienza con SELECT y el final será una línea que comienza con FROM.

ack --range-start ^SELECT --range-end ^FROM 'td+.' ./test.sql

ack es mejor que grep

Si la expresión de búsqueda contiene caracteres especiales como un punto, un paréntesis y otros, para no escapar de ellos usando , puede usar la opción -Q.

# Поиск с экранированием 
ack --json 'mysql.'    
# Поиск без экранирования
ack --json -Q mysql.

ack es mejor que grep

Trabajar con archivos

Obtenga una lista de archivos con una extensión específica

ack -f --js

ack es mejor que grep

Busque todos los archivos js cuyo nombre comience con P* usando la opción (-g).

ack -g --js '/Pa.+.js$'

ack es mejor que grep

Configuración

La utilidad tiene su propio archivo de configuración. Puede tener una configuración global para el usuario (~/.ackrc) y una local para una carpeta específica (debe crear un archivo .ackrc en la carpeta).

La mayoría de las opciones escritas en las configuraciones se pueden especificar manualmente cuando se llaman. Veamos algunos de ellos.

Ignorar carpeta al buscar

--ignore-dir=dist

Agreguemos un tipo de archivo personalizado -vue.

--type-add=vue:ext:js,vue

Ahora puedes usar la opción --vue para buscar archivos .vue. Por ejemplo: Aplicación ack-vue.
Puede especificar una lista de extensiones para esta opción. Por ejemplo, aquí, cuando se usa -vue, se procesará lo siguiente:
Archivos .js.

Ignorar archivos, por ejemplo *.min.js minimizados

--ignore-file=match:/.min.js$/

Instalación

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

Instalación desde el sitio.

curl https://beyondgrep.com/ack-v3.3.1 > ~/bin/ack && chmod 0755 ~/bin/ack

Complementos para editores:

Conclusión

Estas no son todas las posibilidades. La lista completa de funciones se puede ver ejecutando:

ack –-help
# или
ack --man

La utilidad ACK le permite hacer que la búsqueda en el terminal sea más cómoda y flexible. Y usando tubería (reconocimiento -C 10 hola | ack mundo) puede crear una potente combinación para buscar y filtrar datos en el sistema de archivos y en los propios archivos.

Fuente: habr.com

Añadir un comentario