Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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] ? wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne