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 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+"'
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.
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
Además, podemos obtener un informe detallado sobre el número de ocurrencias en cada archivo usando (-l)
ack --js -w -cl mysql
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Ejemplo más complejo
ack '*s+[vd+.d+.d+]'
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+]'
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 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.
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
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.
Trabajar con archivos
Obtenga una lista de archivos con una extensión específica
ack -f --js
Busque todos los archivos js cuyo nombre comience con P* usando la opción (-g).
ack -g --js '/Pa.+.js$'
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