#1 Le 27/03/2013, à 01:07
- elektra_for_ever
[RESOLU] remplacement de chaine dans un fichier avec sed
Bonjour,
Je suis en train de scripter l install et la config d'Ubuntu et de Samba 4 pour mon serveur et voila quelques heures que je m acharne a vouloir remplacer une chaine dans mon fichier hosts a l aide de sed et je sèche complétement
voici le code pour la chaine a remplacer:
dans mon hosts, j'ai:
127.0.0.1 Localhost
que je remplace par:
via la commande :sed -i 's/127.0.0.1 localhost/127.0.0.1 localhost.localdomain localhost/g' /etc/hosts
ça fonctionne
J'ai aussi :
127.0.0.1 irissrv
que je voudrais remplacer comme ceci: sed -i "s/127.0.0.1 $HN /$IP $HN.$FQDN $HN/g" /etc/hosts
Ce script étant destiné a plusieurs serveurs différents chacun avec son ip, hostname etc, j ai remplacé ces paramètres par des variables a définir en début de script.
le problème, c'est qu il ne se passe absolument rien lorsque j exécute cette dernière commande.La ligne ne se remplace pas.
Je n'ai trouvé aucun tuto vraiment clair (pour moi) sur l utilisation de sed et j avoue qu'un peu d aide me serait fort utile.
Merci beaucoup
Dernière modification par elektra_for_ever (Le 27/03/2013, à 05:09)
Hors ligne
#2 Le 27/03/2013, à 01:35
- nesthib
Re : [RESOLU] remplacement de chaine dans un fichier avec sed
1- par défaut sed est sensible à la casse : « Localhost » ≠ « localhost », je suppose qu'ici il s'agit d'une erreur, sinon tu peux utiliser le drapeau « i » à la fin de la substitution
2- le nombre d'espaces est respecté dans ta commande, tu peux avantageusement substituer ta suite de blancs par " \+" (note l'espace) ou encore par « [[:blank:]]\+ »
3- le drapeau « g » est à mon avis inutile, puisque tu es censé avoir au maximum une occurrence par ligne de « localhost » seul. En revanche il peut être utilise de s'assurer que tu ne modifies que les lignes composées uniquement de « 127.0.0.1 localhost », ce que tu peux faire avec « ^127\.0\.0\.1[[:blank:]]\+localhost$ »
sed -i 's/^127\.0\.0\.1[[:blank:]]\+localhost$/127.0.0.1 localhost.localdomain localhost/' /etc/hosts
pour ta seconde expression, le fait d'utiliser des guillemets simples « '…' » empêche l'interprétation de tes variables. Deux alternatives :
sed "s/…${VAR1}…/…${VAR2}…/" fichier
ou
sed 's/…'"${VAR1}"'…/…'"${VAR2}"'…/' fichier
(note bien les doubles guillemets « " + ' » ou « ' + " »)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 27/03/2013, à 01:57
- elektra_for_ever
Re : [RESOLU] remplacement de chaine dans un fichier avec sed
Merci pour ta réponse,
j ai bien corrigé ma première commande mais pour les deux dernières, aucune ne semble vouloir fonctionner.
sed 's/127.0.0.1[[:blank:]]\+'"${HN}"'/'"${IP}[[:blank:]]\+"''"${HN}"'.'"${FQDN}[[:blank:]]\+"''"${$HN}"'/' /etc/hosts
message d'erreur: 33: BAD Substituion
Dernière modification par elektra_for_ever (Le 27/03/2013, à 02:08)
Hors ligne
#4 Le 27/03/2013, à 02:24
- elektra_for_ever
Re : [RESOLU] remplacement de chaine dans un fichier avec sed
Finalement a force de tâtonner...(méthode empirique)
sed "s/127.0.0.1[[:blank:]]\+$HN"/"$IP[[:blank:]]\+$HN"."$FQDN[[:blank:]]\+$HN"/"" /etc/hosts
ça fonctionne.
merci pour le coup de main
Hors ligne
#5 Le 27/03/2013, à 04:56
- nesthib
Re : [RESOLU] remplacement de chaine dans un fichier avec sed
un p'tit [résolu] ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne