Lorsque je traite des entrées potentiellement non normalisées, j'aime voir le travail entier «épelé» ligne par ligne pour l'inspection visuelle avant de l'exécuter (en particulier lorsqu'il s'agit de quelque chose de destructeur comme le nettoyage de la boîte aux lettres des personnes).
Donc, ce que je fais est de générer une liste de paramètres (c'est-à-dire des noms d'utilisateurs), de le nourrir dans un fichier à la manière d'un enregistrement par ligne, comme ceci:
johndoe
jamessmith
janebrown
Ensuite, j'ouvre la liste vim
et la sélectionne avec des expressions de recherche et de remplacement jusqu'à obtenir une liste des commandes complètes devant être exécutées, comme ceci:
/bin/rm -fr /home/johndoe
/bin/rm -fr /home/jamessmith
Ainsi, si votre expression rationnelle est incomplète, vous verrez dans quelle commande auront des problèmes potentiels (c'est-à-dire /bin/rm -fr johnnyo connor
). De cette façon, vous pouvez annuler votre expression rationnelle et l'essayer à nouveau avec une version plus fiable. Name mangling est connu pour cela, car il est difficile de prendre en charge tous les cas délicats tels que Van Gogh, O'Connors, St. Clair, Smith-Wesson.
Avoir set hlsearch
est utile pour cela vim
, car cela mettra en évidence tous les matchs, de sorte que vous puissiez facilement le repérer s'il ne correspond pas, ou les matchs de manière non intentionnelle.
Une fois que votre expression rationnelle est parfaite et qu'elle capture tous les cas que vous pouvez tester / penser, je la convertis généralement en une expression sed afin qu'elle puisse être entièrement automatisée pour une autre exécution.
Dans les cas où le nombre de lignes d’entrée vous empêche de procéder à une inspection visuelle, il est vivement recommandé d’envoyer la commande à l’écran (ou, mieux encore, un journal) avant son exécution. Par conséquent, s’il se produit une erreur, vous savez exactement quelle commande a été causée. ça échoue. Ensuite, vous pouvez revenir à votre expression rationnelle originale et ajuster une fois de plus.
printf "foo bar\nbaz bat" | xargs echo whee
va céderwhee foo bar baz bat
. Peut-être ajouter les options-L
ou-n
?