Maison  >  Article  >  Opération et maintenance  >  Quel est le caractère pipe sous Linux

Quel est le caractère pipe sous Linux

青灯夜游
青灯夜游original
2022-06-17 15:42:019546parcourir

Sous Linux, le caractère pipe est "|", qui est principalement utilisé pour connecter deux ou plusieurs commandes ensemble et utiliser la sortie d'une commande comme entrée de la commande suivante ; .. ]", la sortie de la commande à gauche du caractère "|" sera utilisée comme entrée de la commande à droite du caractère "|". Le caractère pipe peut être utilisé en continu. La sortie de la première commande sera utilisée comme entrée de la deuxième commande, et la sortie de la deuxième commande sera utilisée comme entrée de la troisième commande, et ainsi de suite.

Quel est le caractère pipe sous Linux

L'environnement d'exploitation de ce tutoriel : système linux7.3, ordinateur Dell G3.

Shell a également une fonction, qui consiste à connecter deux ou plusieurs commandes (programmes ou processus) ensemble et à utiliser la sortie d'une commande comme entrée de la commande suivante. Deux ou plusieurs commandes connectées de cette manière Un tuyau est formé. .

Les tuyaux Linux utilisent des barres verticales | pour connecter plusieurs commandes, appelées caractères de tuyau.

command1 | command2
command1 | command2 [ | commandN... ]

Lorsqu'un tube est placé entre deux commandes, la sortie de la commande à gauche du symbole du tube | devient l'entrée de la commande à droite. Tant que la première commande écrit sur la sortie standard et que la deuxième commande lit à partir de l'entrée standard, les deux commandes peuvent former un canal. La plupart des commandes Linux peuvent être utilisées pour former des tubes.

Le caractère pipe peut être utilisé en continu. La sortie de la première commande sera utilisée comme entrée de la deuxième commande, et la sortie de la deuxième commande sera utilisée comme entrée de la troisième commande, et ainsi de suite.

Quel est le caractère pipe sous Linux

Il convient de noter ici que command1 doit avoir une sortie correcte et que command2 doit être capable de traiter le résultat de sortie de command2 ; et command2 ne peut traiter que le résultat de sortie correct de command1, mais ne peut pas gérer le message d'erreur de commande1.

Par exemple : triez le fichier hello.sh et recherchez la ligne contenant "meilleur" après l'avoir trié et dédupliqué. La commande est : cat hello.sh sort | grep 'better'

Afficher le texte.

Trier
  • Supprimer la duplication
  • Filtre

  • 【1】La première étape - Afficher le texteQuel est le caractère pipe sous Linux
  • Utilisez d'abord la commande cat pour afficher le texte, et le contenu imprimé à l'écran est la sortie de la commande cat
[root@linuxforliuhj test]# cat hello.sh 
hello this is linux
be better
be better
i am lhj
hello this is linux
i am lhj
i am lhj
be better
i am lhj
have a nice day
have a nice day
hello this is linux
hello this is linux
have a nice day
zzzzzzzzzzzzzz
dddddddd
gggggggggggggggggggg
[root@linuxforliuhj test]#

【2】Le deuxième processus - le tri

Les résultats générés par la commande cat précédente sont envoyés à la commande de tri via le pipeline, de sorte que la commande de tri trie le texte généré par la commande cat précédente

[root@linuxforliuhj test]# cat hello.sh | sort
be better
be better
be better
dddddddd
gggggggggggggggggggg
have a nice day
have a nice day
have a nice day
hello this is linux
hello this is linux
hello this is linux
hello this is linux
i am lhj
i am lhj
i am lhj
i am lhj
zzzzzzzzzzzzzz
[root@linuxforliuhj test]#

【3】 Le troisième processus Processus - Déduplication

Comme mentionné dans l'article précédent présentant uniq, le tri peut être efficacement dédupliqué lorsqu'il est utilisé en combinaison avec uniq, de sorte que le texte généré par le tri est envoyé à uniq pour être traité via le pipeline, de sorte qu'uniq traite le tri. text. , peut supprimer efficacement les doublons

[root@linuxforliuhj test]# cat hello.sh | sort | uniq
be better
dddddddd
gggggggggggggggggggg
have a nice day
hello this is linux
i am lhj
zzzzzzzzzzzzzz
[root@linuxforliuhj test]#

【4】Le quatrième processus - le filtrage

La dernière étape du filtrage consiste également à filtrer la sortie de texte après le traitement de la commande précédente, la commande uniq

[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better'
be better
[root@linuxforliuhj test]#

Voici le point clé. !

Voici le point important !

Voici le point important !

Les commandes cat, sort, uniq, grep et autres ci-dessus prennent toutes en charge le caractère pipe car ces commandes peuvent lire le texte pour être traité à partir de l'entrée standard (c'est-à-dire la lecture des paramètres à partir de l'entrée standard) ; pour certaines commandes, telles que rm, kill et d'autres commandes, elles ne prennent pas en charge la lecture des paramètres à partir de l'entrée standard, mais prennent uniquement en charge la lecture des paramètres à partir de la ligne de commande. (c'est-à-dire que delete doit être spécifié après le fichier ou le répertoire de commande rm, le numéro de processus à tuer doit être spécifié après la commande kill, etc.)

Alors, quel type de commandes prennent en charge les tubes et quel type de commandes ne supporte pas les tuyaux ?

Généralement, les commandes qui traitent du texte, telles que sort, uniq, grep, awk, sed, etc., prennent toutes en charge les tubes ; les commandes qui ne traitent pas de texte, telles que rm et ls, ne prennent pas en charge les tubes
[root@linuxforliuhj test]# cat hello.sh | sort
be better
be better
be better
dddddddd
gggggggggggggggggggg
have a nice day
have a nice day
have a nice day
hello this is linux
hello this is linux
hello this is linux
hello this is linux
i am lhj
i am lhj
i am lhj
i am lhj
zzzzzzzzzzzzzz
[root@linuxforliuhj test]#

. n'y a pas de paramètres après le tri, la sortie de la commande précédente lancée par le caractère barre verticale est traitée (c'est-à-dire que la sortie standard de la commande précédente est utilisée comme entrée standard de cette commande)

[root@linuxforliuhj test]# ls
beifen.txt  hello.sh  mk  read.ln  read.sh  read.txt  sub.sh
[root@linuxforliuhj test]# ls | grep read.sh
read.sh
[root@linuxforliuhj test]# ls | grep read.sh | rm
rm: missing operand
Try 'rm --help' for more information.
[root@linuxforliuhj test]#

Lorsque le fichier à être delete n'est pas spécifié après rm, une erreur sera signalée. Les paramètres sont perdus, donc les commandes telles que rm ne prennent pas en charge la lecture des paramètres à partir de l'entrée standard. Elles prennent uniquement en charge la spécification de paramètres sur la ligne de commande, c'est-à-dire la spécification des fichiers à supprimer.

Qu'est-ce qui est prioritaire entre les paramètres d'entrée standard et les paramètres de ligne de commande ?

Il y a les deux fichiers suivants
[root@linuxforliuhj test]# cat a.txt 
aaaa
dddd
cccc
bbbb
[root@linuxforliuhj test]# cat b.txt 
1111
3333
4444
2222
[root@linuxforliuhj test]#
Exécutez la commande : cat a.txt | sort

[root@linuxforliuhj test]# cat a.txt | sort
aaaa
bbbb
cccc
dddd
[root@linuxforliuhj test]#

Lorsque le paramètre de ligne de commande de sort est vide, la sortie de la commande précédente sera utilisée comme entrée de cette commande par défaut

Commande d'exécution : cat a.txt | sort b.txt

[root@linuxforliuhj test]# cat a.txt | sort b.txt 
1111
2222
3333
4444
[root@linuxforliuhj test]#

Vous pouvez voir que lorsque le paramètre de ligne de commande du tri (ici b.txt) n'est pas vide, le tri ne lira pas les paramètres dans l'entrée standard , et quand Lire les paramètres de la ligne de commande

Exécuter la commande : cat a.txt | sort b.txt -

[root@linuxforliuhj test]# cat a.txt | sort b.txt -
1111
2222
3333
4444
aaaa
bbbb
cccc
dddd
[root@linuxforliuhj test]#

" - "Indique l'entrée standard, c'est-à-dire la sortie de la commande cat a.txt, qui est équivalent au fichier b.txt et à l'entrée standard ensemble Le tri équivaut à trier a.txt b.txt

[root@linuxforliuhj test]# sort a.txt b.txt
1111
2222
3333
4444
aaaa
bbbb
cccc
dddd
[root@linuxforliuhj test]#

思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!

相关推荐:《Linux视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn