résultat de la commande console en tant que fichier d'entrée pour les commandes sed ou autres

0

Certaines commandes prennent un fichier comme entrée. Existe-t-il un moyen de traiter le résultat d'une commande comme un fichier?

Par exemple, je veux obtenir une chaîne entre 2 chaînes:

sed -n "/START-WORD-HERE/,/END-WORD-HERE/p" input

mais je veux utiliser une commande qui génère beaucoup de texte en entrée, par exemple 'cat somefile'. J'ai essayé de remplacer l'entrée par $ (cat somefile) mais sed a renvoyé une erreur pour chaque mot renvoyé par la commande cat ...

utilisateur404
la source
Soit un tuyau ou une substitution de processus .
Glenn Jackman

Réponses:

0

Oui, et c'est le cœur même de la philosophie Linux "De nombreux petits outils pour créer un processus plus grand"

Linux utilise quelque chose appelé des canaux de ligne de commande.

Pour les utiliser, il vous suffit de joindre deux commandes en utilisant le caractère de barre verticale.

|

Donc, dans votre cas, vous avez dit que vous vouliez envoyer le résultat de la commande cat dans la commande sed, vous pouvez le faire comme suit:

cat somefile | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

Notez que dans ce cas, vous ne spécifiez plus le nom du fichier après la commande.

99% de toutes les commandes Linux vous permettront d'utiliser des pipes, mais assurez-vous de lire les pages de manuel de certaines d'entre elles, car bon nombre d'entre elles vous obligent à spécifier le nom de fichier avec lequel travailler, mais vous indiquent généralement utiliser un

-

(Caractère moins)

À la place du nom de fichier.

Rappelez-vous également que dans la plupart des cas, le tuyau est linéaire, la sortie d’une extrémité constituant l’entrée de l’autre, effectuant toutes les transformations effectuées le long de la chaîne.

Cela signifie par exemple, si vous

cat somefile | grep someword | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

L'entrée à sed ne sera que la sortie de toutes les opérations que grep a effectuées sur l'entrée de cat.

Il est toujours préférable de tester / expérimenter d'abord une copie du fichier jusqu'à ce que vous sachiez que tout soit correct et que vous n'ayez pas peur de développer les choses une étape à la fois.

obtenir le

cat blah | grep bleah

bit à droite, avant d'ajouter le bit sed sur. Ensuite, réglez correctement le bit sed avant d'ajouter le bit awk / wc / ou quoi que ce soit d'autre. Regarder la sortie étape par étape vous permettra de déboguer et de vérifier votre pipe au fur et à mesure.

De nombreuses commandes effectuent un grand nombre de tâches différentes et c’est un excellent prétexte pour passer une soirée à lire des pages de manuels d’outils de ligne de commande Linux. Il existe des outils pour couper les colonnes dans les fichiers, convertir les documents Word en texte, compter le nombre de lignes et bien plus encore.

et puis, une fois que vous en avez assez, voici un lien vers un article que j'ai écrit pour PHP Builder il y a longtemps, vous expliquant comment écrire vos propres processeurs de pipe en PHP.

http://www.phpbuilder.com/columns/peter_shaw20090211.php3

Surtout amusez-vous, vous pouvez faire des choses étonnantes avec un nombre réduit d'outils.

shawty
la source