2011-10-19 6 views
2

Exemple de script est indiqué ci-dessous:Scripting Shell en utilisant sed

#!/bin/bash 
sed -i~ 's/user1/user2/g' myfile.txt 

Il remplace user1 avec user2 dans myfile.txt

Comment puis-je changer ci-dessus script pour obtenir confirmation que le script trouvé user1 & remplacé avec user2? Fondamentalement, s'il ne trouve pas user1, il devrait donner un message d'alerte à l'invite de commande.

Merci!

+0

Vous pourriez avoir 'sed' en contact avec un fichier de drapeau s'il réussit une substitution. Comme une optimisation, ne le faites que pour le premier match. Si vos fichiers d'entrée sont trop volumineux pour les solutions grep && sed et diff, il pourrait être utile de reconstituer un script sed un peu plus complexe. – tripleee

Répondre

2

Une alternative à diffing après est à grep avant:

grep -q 'user1' myfile.txt && sed -i~ 's/user1/user2/g' myfile.txt || echo "user1 not there" 

Le -q signifie que grep fonctionne tranquillement et renvoie un succès si trouvé, alors et alors seulement Va-t-il continuer à faire le remplacement?

1

Essayez diff outil:

fgrep -q 'user1' myfile.txt 2>&1 1>/dev/null 
if [ "$?" -eq 0 ]; then 
    echo " user1 found." 
fi 
... 
diff -q myfile.txt myfile.txt~ 2>&1 1>/dev/null 
if [ "$?" -eq 1 ]; then 
    echo " Match found & Replaced." 
fi 
+0

J'ai 5 commandes sed dans mon script et je veux vraiment vérifier chacune de ces chaînes remplacées ou non. Comment puis je faire ça? – Mike

+0

@Mike, vous pouvez diviser les opérations 'sed' en commandes distinctes et faire ce que John dit après chacune d'elles. – paxdiablo

+0

Enveloppez-le dans une fonction. – tripleee