Remplacer chaine (un peu complexe) par une autre - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 19-02-2010 à 14:33:40
man sed, option "-i"
de rien
Marsh Posté le 19-02-2010 à 14:45:16
Merci, mais à vrai dire le retour à la ligne n'est pas mon plus gros problème... ce qui m'embête surtout c'est de lui faire reconnaitre tous les caractères spéciaux là.
Marsh Posté le 19-02-2010 à 14:50:58
retour à la ligne ?
l'option -i permet de faire de la modification "live" sur le fichier que tu passes à sed, sans utiliser de fichier intermédiaire ... j'ai même pas regardé ce que tu cherchais à modifier
le sed -e "truc" fichier1 > fichier 2 && mv fichier2 fichier1 c'est quand même particulièrement crade
Marsh Posté le 19-02-2010 à 15:41:08
wedgeant a écrit : retour à la ligne ? |
t'as tout à fait raison, je pige pas trop où j'avais la tête..
Bon, j'ai trouvé un début de réponse :
sed -e "s/\\/\* \#include \"xxdb.h\" \*\//\\/\* \#include \"xxdb.h\" \*\/ \#include \<ldapdb.h\> /g" /usr/src/bind9-9.6.1.dfsg.P3/bin/named/main.c
Ca fait ce que je veux, mais sur une ligne.. je voudrais avoir mon include à la ligne suivante. Déjà que le truc avant je sais pas comment je me suis débrouillé pour le pondre..
Marsh Posté le 19-02-2010 à 16:38:23
bonjour
utilise \n pour newline je crois.
(astuce pour vim: tu tapes ctrl+v Entrée et tu as le code que tu veux pour l'expression régulière)
Donc sed -e "s/\(\/\* #include \"xxdb.h\" \*\/\)/\1\n#include \<ldapdb.h\>/" etc....
Marsh Posté le 19-02-2010 à 14:21:39
Hello,
dans un fichier, je voudrais remplacer :
/* #include "xxdb.h" */
par :
/* #include "xxdb.h" */
#include <ldapdb.h>
Pour ce faire, j'ai essayé ceci :
sed -e "s/\\/* #include "xxdb.h" *\//\\/* #include "xxdb.h" *\/ #include <ldapdb.h>/g" /usr/src/bind9-9.6.1.dfsg.P3/bin/named/main.c > /usr/src/bind9-9.6.1.dfsg.P3/bin/named/main.c.tmp && mv -f /usr/src/bind9-9.6.1.dfsg.P3/bin/named/main.c.tmp /usr/src/bind9-9.6.1.dfsg.P3/bin/named/main.c
Mais ça ne change rien.. Pas de message d'erreur, c'est juste que mon fichier n'est pas changé.
quelqu'un aurait une idée ?