Ack vaut mieux que grep

Je veux vous parler d'un utilitaire de recherche qui simplifie grandement la vie. Lorsque j'arrive sur le serveur et que je dois chercher quelque chose, la première chose que je fais est de vérifier si ack est installé. Cet utilitaire est un excellent remplacement pour grep, ainsi que pour find et wc dans une certaine mesure. Pourquoi pas grep ? Ack a des paramètres plus agréables, des options plus lisibles par l'homme, une expression régulière Perl et un système de configuration. Si vous aimez (devez) rechercher dans le terminal, vous devriez absolument l'essayer.

Caractéristiques de base

Ack est récursif par défaut et écrire moins d'options est toujours une bonne idée.

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

ack -w mysql

Ack vaut mieux que grep

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

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

Ack vaut mieux que grep

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

ack --help-types

Vous devez souvent compter le nombre de fois qu'une phrase apparaît dans un fichier journal, par exemple, pour comprendre la quantité de données traitées par le script.

Ack vaut mieux que grep
Nous comptons combien de fois le processus se produit 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 aussi dans un groupe. Finalisons la recherche précédente du mot mysql : comptez le nombre d'occurrences de mots (avec) dans les fichiers *.js (--js), à l'exclusion des fichiers dans lesquels rien n'a été trouvé (-h) et résumer le résultat.

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

Ack vaut mieux que grep

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

ack --js -w -cl mysql

Ack vaut mieux que grep

Si vous avez besoin de contexte supplémentaire pour votre recherche, vous pouvez demander ack
afficher les lignes jusqu'à (-B) et après (-A) de l'expression trouvée. Pour ce faire, vous devez spécifier après l'option le nombre de lignes à afficher.

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

Ack vaut mieux que grep

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

Ack vaut mieux que grep

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

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

Il existe également une option (-v) pour inverser la recherche, c'est-à-dire afficher les lignes qui ne contiennent pas un motif donné.

Expression régulière

Ack, contrairement à grep, utilise des expressions compatibles Perl.
Pour moi, c’est un gros plus : je n’ai pas besoin de me souvenir d’une syntaxe distincte pour les expressions régulières.

ack 'vars+adds+'

Ack vaut mieux que grep

Exemple plus complexe

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

Ack vaut mieux que grep

Souvent, vous souhaitez laisser dans les résultats uniquement ce qui correspond au modèle. L'option --output sera utile ici (-o)

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

Ack vaut mieux que grep

De plus, en utilisant des parenthèses, nous pouvons sélectionner la pièce trouvée et y accéder en sortie via la variable $[group number]. Par exemple,

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

Ack vaut mieux que grep

Ack a des options utiles --range-start и --fin de plage. Ils aident quand
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 vaut mieux que grep

Extrayons les noms de 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 vaut mieux que grep

Si l'expression de recherche contient des caractères spéciaux tels qu'un point, une parenthèse et autres, alors afin de ne pas les échapper à l'aide de , vous pouvez utiliser l'option -Q.

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

Ack vaut mieux que grep

Travailler avec des fichiers

Obtenir une liste de fichiers avec une extension spécifique

ack -f --js

Ack vaut mieux que grep

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

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

Ack vaut mieux que grep

Configuration

L'utilitaire possède son propre fichier de configuration. Vous pouvez avoir à la fois une configuration globale pour l'utilisateur (~/.ackrc) et une configuration locale pour un dossier spécifique (vous devez créer un fichier .ackrc dans le dossier).

La plupart des options écrites dans les configurations peuvent être spécifiées manuellement lors de leur appel. Examinons-en quelques-uns.

Ignorer le dossier lors de la recherche

--ignore-dir=dist

Ajoutons un type de fichier personnalisé -vue.

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

Vous pouvez maintenant utiliser l'option --vue pour rechercher des fichiers .vue. Par exemple: Application ack --vue.
Vous pouvez spécifier une liste d'extensions pour cette option. Par exemple, ici, lors de l'utilisation de -vue, les éléments suivants seront traités :
Fichiers .js.

Ignorer les fichiers, par exemple minifiés *.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 ne sont pas toutes les possibilités. La liste complète des fonctions peut être consultée en exécutant :

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

L'utilitaire ack vous permet de rendre la recherche dans le terminal plus pratique et plus flexible. Et en utilisant un pipeline (ack -C 10 bonjour | ack monde), vous pouvez créer une puissante combinaison pour rechercher et filtrer les données dans le système de fichiers et dans les fichiers eux-mêmes.

Source: habr.com

Ajouter un commentaire