Unix / Linux - Tubes et filtres

Dans ce chapitre, nous discuterons en détail des tubes et des filtres sous Unix. Vous pouvez connecter deux commandes ensemble afin que la sortie d'un programme devienne l'entrée du programme suivant. Deux commandes ou plus connectées de cette manière forment un tube.

Pour faire un tuyau, placez une barre verticale (|) sur la ligne de commande entre deux commandes.

Lorsqu'un programme prend son entrée d'un autre programme, il effectue une opération sur cette entrée et écrit le résultat sur la sortie standard. Il est appelé unfilter.

La commande grep

La commande grep recherche un fichier ou des fichiers pour les lignes qui ont un certain modèle. La syntaxe est -

$grep pattern file(s)

Le nom "grep" provient de la commande ed (un éditeur de ligne Unix) g/re/p ce qui signifie «rechercher globalement une expression régulière et imprimer toutes les lignes la contenant».

Une expression régulière est soit du texte brut (un mot, par exemple) et / ou des caractères spéciaux utilisés pour la mise en correspondance de modèles.

L'utilisation la plus simple de grep est de rechercher un modèle composé d'un seul mot. Il peut être utilisé dans un tube pour que seules les lignes des fichiers d'entrée contenant une chaîne donnée soient envoyées à la sortie standard. Si vous ne donnez pas à grep un nom de fichier à lire, il lit son entrée standard; c'est ainsi que fonctionnent tous les programmes de filtrage -

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

Il existe différentes options que vous pouvez utiliser avec le grep commande -

Sr.No. Option et description
1

-v

Imprime toutes les lignes qui ne correspondent pas au motif.

2

-n

Imprime la ligne correspondante et son numéro de ligne.

3

-l

Imprime uniquement les noms des fichiers avec des lignes correspondantes (lettre «l»)

4

-c

Imprime uniquement le nombre de lignes correspondantes.

5

-i

Correspond aux majuscules ou aux minuscules.

Utilisons maintenant une expression régulière qui dit à grep de trouver des lignes avec "carol", suivi de zéro ou d'autres caractères abrégés dans une expression régulière par ". *"), puis suivi de "Aug" .−

Ici, nous utilisons le -i option pour avoir une recherche insensible à la casse -

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

La commande sort

le sortLa commande organise les lignes de texte par ordre alphabétique ou numérique. L'exemple suivant trie les lignes du fichier alimentaire -

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

le sortLa commande organise les lignes de texte par ordre alphabétique par défaut. Il existe de nombreuses options qui contrôlent le tri -

Sr.No. La description
1

-n

Trie numériquement (exemple: 10 triera après 2), ignore les blancs et les tabulations.

2

-r

Inverse l'ordre de tri.

3

-f

Trie les majuscules et les minuscules ensemble.

4

+x

Ignore d'abord x champs lors du tri.

Plus de deux commandes peuvent être liées dans un tube. Prenant un exemple de tuyau précédent en utilisantgrep, nous pouvons encore trier les fichiers modifiés en août par ordre de taille.

Le tube suivant se compose des commandes ls, grep, et sort -

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

Ce tube trie tous les fichiers de votre répertoire modifiés en août par ordre de taille, et les imprime sur l'écran du terminal. L'option de tri + 4n saute quatre champs (les champs sont séparés par des blancs) puis trie les lignes dans l'ordre numérique.

Les commandes pg et plus

Une sortie longue peut normalement être compressée par vous sur l'écran, mais si vous exécutez du texte à travers plus ou utilisez le pgcommande comme filtre; l'affichage s'arrête une fois que l'écran est plein de texte.

Supposons que vous ayez une longue liste de répertoires. Pour faciliter la lecture de la liste triée, dirigez la sortie versmore comme suit -

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
	.
	.
	.
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

L'écran se remplira une fois que l'écran sera plein de texte composé de lignes triées par ordre de taille de fichier. Au bas de l'écran se trouve lemore invite, où vous pouvez taper une commande pour vous déplacer dans le texte trié.

Une fois que vous avez terminé avec cet écran, vous pouvez utiliser l'une des commandes répertoriées dans la discussion du programme more.