Modifier une chaîne de caractères dans un fichier avec sed?
J'ai un inputfile avec le modèle comme indiqué ci-dessous. Je veux changer de Version: à l'aide de sed.
Package: somename
Priority: extra
Section: checkinstall
Maintainer: joe@example.com
Architecture: i386
Version: 3.1.0.2-1
Depends:
Provides: somename
Description: some description
Actuellement, je suis arriver à la version actuelle à l'aide de grep -m 1 Version inputfile | sed 's/[:_#a-zA-Z\s"]*//g'
et je suis en train de remplacer la version actuelle avec sed 's/3.1.0.2-1/3.1.0.2/' inputfile
Toutefois, cela ne semble pas fonctionner, mais quand je l'ai essayer en ligne de commande à l'aide de l'écho, il fonctionne.
echo 'Version: 3.0.9.1' | sed 's/3.0.9.1/3.2.9.2/'
Output: Version: 3.2.9.2
Toute aide sur comment je peux accomplir cela serait apprécié. De préférence, je voudrais changer la version sans obtenir la version actuelle dans le fichier.
Merci D'Avance
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de la commande grep.
Vous souhaitez utiliser le "-i" commutateur de sed pour "modifier le fichier [I]n place."
Voir la page de man de sed: http://unixhelp.ed.ac.uk/CGI/man-cgi?sed
Le nom
sed
vient littéralement de "Éditeur de Flux" - le comportement que vous voyez est la façon dont il a été conçu. Quand vous dites:il lit le fichier, exécuter les commandes et imprime le résultat - il ne pas l'enregistrer dans le fichier (bien que certaines versions de
sed
avez quelques options de lui dire de le faire). Vous voulez probablement faire ceci:Puis vérifiez que
newfile
est correct, et puismv newfile file
. Si vous êtes absolument certain de votre modifier le script est correct, et vous pouvez faire face aux conséquences de l'écraser votre fichier avec des données erronées ou si elles ne le sont pas, alors vous pourriez envisager d'utiliser la modification sur place des drapeaux, mais il est généralement plus sûr d'enregistrer dans un fichier temporaire, de sorte que vous pouvez tester/valider.Vous avez une faute de frappe, le dernier point devrait être un tableau de bord, essayez ceci: