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 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+"'
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.
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
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
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/
# 2 строки после
ack --js --column -A 2 "query.once('" . /lib/
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+'
Exemple plus complexe
ack '*s+[vd+.d+.d+]'
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+]'
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 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
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
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.
Travailler avec des fichiers
Obtenir une liste de fichiers avec une extension spécifique
ack -f --js
Recherchez tous les fichiers js dont le nom commence par P* en utilisant l'option (-g).
ack -g --js '/Pa.+.js$'
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