Ack est meilleur que grep

Je veux parler d'un utilitaire de recherche qui simplifie énormément la vie. Lorsque je me connecte à un serveur et que j'ai besoin de faire une recherche, je vérifie d'abord si ack est installé. Cet utilitaire est un excellent substitut à grep, et en quelque sorte à find et wc. Pourquoi pas grep ? Ack a des réglages par défaut plus agréables, des options plus lisibles, des expressions régulières perl et un système de configuration. Si vous aimez (ou devez) chercher dans le terminal, vous devez absolument l'essayer.

Fonctionnalités de base

Ack est par défaut récursif, et avoir moins d'options à écrire est toujours un avantage.

Nous pouvons utiliser le drapeau -w, pour dire à l'utilitaire de rechercher une instance de notre modèle, entourée de délimitations de mots (espaces, barres obliques, etc.).

ack -w mysql

Ack est meilleur que grep

Ack prend en charge la recherche par type de fichiers. Par exemple, cherchons la version du module dans les fichiers json.

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

Ack est meilleur que grep

La liste complète des types de fichiers pris en charge peut être consultée avec :

ack --help-types

Il faut souvent compter combien de fois une phrase apparaît dans un fichier log, par exemple pour comprendre combien de données un script a traitées.

Ack est meilleur que grep
Comptons combien de fois le mot process apparaît dans le fichier test.log, sans tenir compte de la casse (-i).

Nous pouvons compter les occurrences non seulement dans un fichier spécifique, mais dans un groupe. Améliorons la recherche précédente du mot mysql : comptons le nombre d'occurrences (-c) dans les fichiers *.js (—js), en excluant les fichiers où rien n'a été trouvé (-h) et en totalisant le résultat.

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

Ack est meilleur que grep

De plus, nous pouvons obtenir un rapport détaillé sur le nombre d'occurrences dans chaque fichier avec (-l)

ack --js -w -cl mysql

Ack est meilleur que grep

Si vous avez besoin de contexte supplémentaire pour la recherche, vous pouvez demander à ack
d'afficher les lignes avant (-B) et après (-A) l'expression trouvée. Pour cela, vous devez indiquer après l'option le nombre de lignes à afficher.

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

Ack est meilleur que grep

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

Ack est meilleur que grep

Et si vous avez besoin des deux, utilisez (-C)

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

Il y a aussi une option (-v) pour inverser la recherche, c'est-à-dire montrer les lignes qui ne contiennent pas le modèle spécifié.

Expression régulière

Ack, contrairement à grep, utilise des expressions compatibles avec Perl.
Pour moi, c'est un gros avantage, je n'ai pas à mémoriser une syntaxe distincte pour les regex.

ack 'vars+adds+'

Ack est meilleur que grep

Un exemple plus complexe

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

Ack est meilleur que grep

Il est souvent souhaitable de laisser dans les résultats uniquement ce qui correspond au modèle. L'option —output aidera ici (-o)

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

Ack est meilleur que grep

De plus, grâce aux parenthèses, nous pouvons extraire la partie trouvée et y accéder dans la sortie via la variable $[numéro du groupe]. Par exemple,

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

Ack est meilleur que grep

Ack a des options utiles —range-start et —range-end. Elles sont utiles lorsque
les données ne sont pas stockées sur une seule ligne, mais sous forme multiligne.

Par exemple, il existe un fichier avec du code SQL

Ack est meilleur que grep

Extraire les noms des colonnes. Le début du bloc sera une ligne commençant par SELECT, et la fin sera une ligne commençant par FROM.

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

Ack est meilleur que grep

Si l'expression de recherche inclut des caractères spéciaux tels que le point, la parenthèse, et d'autres, pour éviter de les échapper avec , on peut utiliser l'option -Q.

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

Ack est meilleur que grep

Travailler avec des fichiers

Obtenir une liste de fichiers avec une certaine extension

ack -f --js

Ack est meilleur que grep

Trouver tous les fichiers js dont le nom commence par P*, en utilisant l'option (-g).

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

Ack est meilleur que grep

Configuration

L'outil a son propre fichier de configuration. On peut avoir une configuration globale pour l'utilisateur (~\/ .ackrc) ou locale pour un dossier spécifique (il faut créer un fichier .ackrc dans le dossier).

La plupart des options spécifiées dans les configurations peuvent aussi être écrites manuellement lors de l'appel. Analysons quelques-unes d'elles.

Ignorer le dossier lors de la recherche

--ignore-dir=dist

Ajoutons un type de fichier personnalisé —vue.

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

On peut maintenant utiliser l'option —vue, pour rechercher dans les fichiers .vue. Par exemple : ack —vue App.
On peut également spécifier une liste d'extensions pour cette option. Par exemple, en utilisant —vue, cela inclura aussi
.js fichiers.

Игнорировать файлы, например, минифицированные *.min.js

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

Installation

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

Installation depuis le site

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

Plugins pour les éditeurs :

Conclusion

Ce n'est pas toutes les fonctionnalités. Vous pouvez voir la liste complète des fonctions en exécutant :

ack –-help
# ou
ack --man

L'outil ack facilite la recherche dans le terminal et offre plus de flexibilité. Avec l'utilisation de pipeline (ack -C 10 hello | ack world), il est possible de créer un puissant combiné de recherche et de filtrage de données dans le système de fichiers et dans les fichiers eux-mêmes.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster