J'essaie d'utiliser sed pour modifier un fichier de configuration. Il y a quelques lignes que j'aimerais changer. Je sais que sous Linux sed -i
permet des modifications sur place, mais il vous faut enregistrer dans un fichier de sauvegarde. Cependant, je voudrais éviter d'avoir plusieurs fichiers de sauvegarde et apporter toutes mes modifications en place en même temps.
Existe-t-il un moyen de le faire sed -i
ou existe-t-il une meilleure alternative?
a
sont transformées enb
, puis toutes les instances deb
sont transformées end
. Vous pouvez faire la même chose avec -sed -i -e 's/a\|b/d/g' file
transformer toutes les instances de l'unea
ou de l'autreb
end
.Une autre alternative est
ex
le prédécesseur devi
. Il s'agit en fait de l' outil POSIX de choix pour l'édition de fichiers scriptés sur place; il est extraordinairement plus flexible quesed -i
et sans doute encore plus portable que Perl. (Si vous restez en dehors du monde Windows, il est incontestablement plus portable que Perl.)Il y a une pénurie relative dans cet échange de pile d'exemples de commandes utilisant
ex
, au moins par rapport à la pléthore d'exemples de commandes utilisantsed
,awk
et Perl. Cependant, je me suis beaucoup plongé dans les spécifications POSIX pourex
et je bats le tambour depuis. J'ai écrit de nombreuses réponses en utilisantex
ici et sur l'échange de pile vi / Vim:Lectures complémentaires:
la source
En plus d'utiliser plusieurs
-e
options, vous pouvez également séparer les commandes sed dans un seul script sed à l'aide de sauts de ligne ou de points-virgules.C'est le cas, que ce script soit une ligne unique sur la ligne de commande ou un fichier de script.
par exemple
Les caractères spatiaux autour du
;
sont facultatifs. Je les ai utilisés ici pour m'assurer que le point-virgule se démarque (en général, à l'exception des nouvelles lignes séparant les commandes, l'espace blanc entre les commandes est ignoré ... mais n'oubliez pas que l'espace blanc dans les commandes peut être et est généralement important).ou:
la source