Supposons que j'ai la liste des commandes dans le fichier texte comme ci-dessous (cat cmdlist.txt
): -
cut
lshw
top
awk
sensors
Maintenant, je veux obtenir des informations simples sur cette commande par whatis cut
, whatis lshw
etc. respectivement et imprimer ces sorties de whatis <commadnd>
dans un fichier texte, par exemple cmdinfo.txt
Sortie souhaitée de cmdinfo.txt
(cat cmdinfo.txt
): -
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and text processing language
sensors (1) - print sensors information
Comment puis-je obtenir le fichier cmdinfo.txt
avec la sortie de whatis
pour les commandes de cmdlist.txt
respectivement?
Ceci est seulement exemple fichiers txt.
Suggérez un script simple si nécessaire.
Aussi simple que possible:
xargs whatis < cmdlist.txt > cmdinfo.txt
Beaucoup plus simple,
$ while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and text processing language
sensors (1) - print sensors information
Utilisez la commande ci-dessous pour écrire le résultat dans un fichier.
while read -r line; do whatis "$line"; done < cmdlist.txt > cmdinfo.txt
Très simplement:
for i in $(cat cmdlist.txt); do whatis $i ; done > cmdinfo.txt
Cela parcourt chaque entrée (i
) de la sortie de $(cat cmdlist.txt)
et exécute une whatis
à chaque entrée. Exemple de sortie:
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux processes
awk (1) - pattern scanning and processing language
sensors (1) - print sensors information
NB. Même si dans de nombreux exemples, vous trouverez i
utilisé, vous n'êtes pas obligé de l'utiliser - vous pouvez utiliser la plupart des chaînes alphanumériques simples, par exemple:
for jnka127nsdn in $(cat input.txt); do whatis $jnka127nsdn ; done
Pour le faire sans analyser cat
:
while read -r i ; do whatis $i ; done < cmdlist.txt
Quelque chose comme ça:
#! /bin/bash
in_file=$1
out_file=$2
while read command
do
whatis $command
done < $in_file >> $out_file
J'ai choisi de laisser stderr
intacte, car si vous avez une commande pour laquelle whatis
aucune information n'est disponible, vous devez en être informé (et regarder ailleurs, si nécessaire).
Je pense que vous pouvez obtenir correctement le résultat avec la commande suivante.
$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done | sed "s,: nothing appropriate.,,g" > cmdinfo.txt
En réalité,
$ for i in `cat cmdlist.txt`;do whatis $i 2>&1;done
La commande, la première partie de la commande affichera les sorties comme suit.
cut (1) - remove sections from each line of files
lshw (1) - list hardware
top (1) - display Linux tasks
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
tr (1) - translate or delete characters
vous pouvez le faire avec whatis $(cat cmdlist.txt)
, mais sa sortie inclut les lignes suivantes.
.: nothing appropriate.
.: nothing appropriate.
.: nothing appropriate.
au-dessus de la commande sed
, supprimez certaines lignes de sortie inutiles.
Question est modifié comme maintenant. Si toutes les lignes de cmdlist.txt
peuvent être répertoriées à partir de whatis
, vous pouvez utiliser la commande suivante comme moyen simple.
whatis `cat 1.txt` 2>/dev/null > cmdinfo.txt
Si vous avez juste besoin des lignes qui peuvent être complètement listées de whatis
, vous pouvez utiliser la commande suivante comme méthode simple.
whatis `cat 1.txt` > cmdinfo.txt
Cependant vous pouvez choisir un moyen parmi plusieurs.