Le système d'exploitation Linux vous permet de rechercher à la fois des structures de répertoires et des fichiers de répertoires pour des correspondances de chaînes de texte spécifiques. Un outil commun qui nous aide à réaliser ces recherches dans l'annuaire est un grep (impression d'expression régulière globale ) commande. L'utilisation d'expressions régulières par grep permet d'initier n'importe quelle recherche de modèle de chaîne vers une sortie textuelle correspondante sur la ligne de commande.
[ Vous pourriez également aimer :Ripgrep - L'outil de recherche de ligne de commande le plus rapide pour Linux ]
Cependant, les inconvénients de grep sont dans sa vitesse et ses fonctionnalités non flexibles. C'est là que le ack l'outil prend le relais. Il permet des recherches rapides qui s'étendent aux recherches dans les répertoires de code source tout en offrant à un utilisateur Linux la possibilité d'exclure certaines sorties des résultats de recherche.
Comment installer Ack sous Linux
Toute plate-forme prise en charge par Perl peut accueillir le ack outil de recherche. Nous l'installons en référençant son package principal, ack-grep .
$ sudo apt-get install ack-grep [On Debian, Ubuntu and Mint] $ sudo yum install ack-grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-apps/ack-grep [On Gentoo Linux] $ sudo pacman -S ack-grep [On Arch Linux] $ sudo zypper install ack-grep [On OpenSUSE]
Acquitter la recherche dans le répertoire
Depuis reçu est attribué à être orienté code source, nous pouvons démontrer ses prouesses de recherche de modèle de chaîne via un répertoire de code source. Github est une ressource renommée pour des milliers de répertoires de code source. Un répertoire de code source de projet idéal pour ce guide d'article est le projet neovim.
Installer Git sous Linux
$ sudo apt-get install git [On Debian, Ubuntu and Mint] $ sudo yum install git [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux] $ sudo emerge -a sys-apps/git [On Gentoo Linux] $ sudo pacman -S git [On Arch Linux] $ sudo zypper install git [On OpenSUSE]
Cloner le projet Neovim
Les nombreux types de fichiers différents de ce projet d'éditeur de texte neovim sont nécessaires pour notre guide d'article.
$ git clone https://github.com/neovim/neovim.git
Accédez au neovim répertoire cloné pour démarrer notre didacticiel.
$ cd neovim && ls
Le répertoire de niveau supérieur répertorié expose les fichiers de démarquage (.md)
, fichiers texte (.txt)
, et un fichier YAML.
Mise en œuvre de commandes de recherche d'accusé de réception simples
Étant donné que la plupart des requêtes de recherche à partir de la fenêtre du terminal Linux entraînent un défilement incontrôlable en raison de sorties infinies, nous pouvons diriger ces résultats de recherche vers "moins ” pour les instances de résultats qui dépassent la taille normale de la fenêtre du terminal.
$ echo '--pager=less -RFX' >> ~/.ackrc
L'accusé de réception ci-dessus La commande de configuration gère intelligemment les sorties de résultats débordantes.
Recherche du nombre total de fichiers dans un répertoire
Ce premier exemple de commande nous aide à distinguer l'efficacité logique de ack recherche depuis grep chercher. Via grep , nous pouvons connaître le nombre total de fichiers sur le neovim cloné projet via la commande suivante :
$ find . | wc -l
Accepter ne comptera que les fichiers qu'il juge logiquement pertinents, sa sortie sera donc différente.
$ ack -f | wc -l
Les 7 % ci-dessus (2984-2772 ) les fichiers ignorés sont ignorés de tous les ack requêtes de recherche.
Rechercher une variation de modèle de chaîne spécifique à partir d'un répertoire
Essayons d'interroger les occurrences instantanées du modèle de chaîne "restrict ”.
$ ack restrict
Les sorties ci-dessus pointent vers les numéros de ligne exacts dans les fichiers contenant la correspondance de modèle de chaîne. Le modèle d'écran généré résulte "restrict ” sont également des portions de mots comme restreint et restriction .
Rechercher un mot de modèle de chaîne spécifique à partir d'un répertoire
Si vous n'êtes pas intéressé par un résultat de recherche apparaissant comme une variante mais comme un mot complet, vous devrez implémenter vos modèles de chaîne de recherche différemment.
$ ack -w restrict
Comme vous pouvez le voir, le modèle de chaîne de recherche recherche "restrict " comme un mot complet et non comme une partie d'une autre occurrence de mot.
Rechercher un modèle de chaîne spécifique à partir d'un type de fichier spécifique
Peut-être souhaitez-vous que vos recherches de modèles de chaîne ciblent un fichier spécifique comme un Python (--python)
fichier, c (--c)
fichier, vim (--vim)
fichier ou tout autre type de fichier, votre requête de modèle de chaîne doit faire référence au type de fichier que vous recherchez.
$ ack -w --python restrict
La sortie de la commande ci-dessus pointe vers l'occurrence du mot "restrict ” sur la ligne 110 dans le fichier Python "src/clint.py ”.
Trouver l'occurrence totale d'une recherche de modèle de chaîne dans chaque fichier
Depuis le neovim cloné répertoire que nous utilisons a différents types de fichiers, cette commande compte l'occurrence d'une recherche de modèle de chaîne spécifique (restrict ) dans chacun de ces types de fichiers.
$ ack -c restrict
Contrôle de la sortie d'une recherche de modèle de chaîne
La sortie de la commande ci-dessus inclut des fichiers avec zéro correspondance de modèle de chaîne pour l'entrée de chaîne spécifiée. Pour les éviter, la commande suivante imprime le nombre total de lignes de fichier qui correspondent à une entrée de modèle de chaîne spécifiée.
$ ack -ch restrict
Nous pouvons rendre la sortie ci-dessus plus petite et précise en demandant à la sortie de recherche de ne considérer que les mots complets et non les variantes de mots.
$ ack -ch -w restrict
Nous pouvons également affiner le résultat de la commande ci-dessus pour ne considérer que les fichiers Python :
$ ack -ch -w --python restrict
Nous pouvons également utiliser le temps commande pour surveiller la vitesse de nos recherches :
$ time ack -ch restrict
En étant plus précis dans nos critères de modèle de recherche, nous obtiendrons une sortie plus rapide, comme démontré ci-dessous par rapport aux résultats ci-dessus.
$ time ack -ch -w --python restrict
Nous pourrions également générer les noms de fichiers réels correspondant à un modèle de recherche.
$ ack -f --python
Le modèle de recherche ack pourrait également cibler la convention de dénomination d'un fichier. N'importe quel C fichier avec le "log ” peut être associé à la commande suivante :
$ ack -g log --cc
Le ack L'outil de recherche est très flexible lorsqu'il est géré dans un répertoire de code source. Vous pouvez toujours adopter son utilisation pour les fichiers de votre environnement Linux. Il est extensible et rapide. Utilisez le man ack
commande pour trouver plus d'options pour explorer cet outil rapide et léger.