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 19/02/2014, à 14:30

heuzef

SED et remplacement de texte

Bonjour je rencontre des difficultés pour trouver la syntaxe exacte avec le commande sed.
J'en ai testé un bon gros paquet mais sans succès.

Je souhaite injecter des certificats dans un fichier de configuration, voici un extrait :

   "Certificates":[
      {
         "GUID":"{___GUIDCA___}",
         "Type":"Authority",
         "X509":"___CACRT___"
      },

Je souhaiterais remplacer la valeur ___CACRT___ par le contenu d'un autre fichier donc, voici la syntaxe que j'utilise :

sed -i -e "s|___CACRT___|$(cat test.txt)|g" fichier

Cette syntaxe fonctionne, j'utilise des pipes plutôt que des slashs car le contenu du fichier contient beaucoup de slashs.
Mais la où je coince, c'est que cela ne fonctionne que en uniligne, si le fichier que j'appel (test.txt) contient plusieurs lignes, sed me renvoie une erreur :

sed: -e expression n°1, caractère 28: commande `s' inachevée

Merci à ceux qui m'éclairerons sur le sujet =)

Hors ligne

#2 Le 19/02/2014, à 16:21

pingouinux

Re : SED et remplacement de texte

Bonjour,
Voici un script en python qui devrait faire l'affaire :
modif_config.py

#! /usr/bin/python

import sys, re

rec=re.compile('___CACRT___')

with open(sys.argv[1],'r') as f, open(sys.argv[2],'r') as t , open(sys.argv[3],'w') as g :
   fic=f.read()
   txt=t.read()

   while True :
      k=rec.search(fic)
      if(k) :
         g.write(fic[:k.start(0)])
         g.write(txt)
         fic=fic[k.end(0):]
      else :
         g.write(fic)
         break

À utiliser ainsi :

./modif_config.py config_initial test.txt config_modifie

Hors ligne

#3 Le 20/02/2014, à 11:22

credenhill

Re : SED et remplacement de texte

hello
le $(cat ...) dans la ligne sed étant résolu par le shell, il va placer des sauts de lignes dans la commande s, d'ou l'erreur
la présence de " dans la ligne complique un peu les choses

$ cat a1
 "Certificates":[
      {
         "GUID":"{___GUIDCA___}",
         "Type":"Authority",
         "X509":"___CACRT___"
      },
$ cat a11
aa
bb
cc
$ sed -re 's/(^[^_]*)___CACRT___(")/echo -n '"'\1'"';cat a11; echo "\\""/e' a1
 "Certificates":[
      {
         "GUID":"{___GUIDCA___}",
         "Type":"Authority",
         "X509":"aa
bb
cc
"
      },

Dernière modification par credenhill (Le 20/02/2014, à 11:33)

Hors ligne

#4 Le 20/02/2014, à 13:18

Postmortem

Re : SED et remplacement de texte

Salut,
Une autre version avec sed :

$ sed '/___CACRT___/ s//'"$(sed '$! s/$/\\/' test.txt)"/ fichier
 "Certificates":[
      {
         "GUID":"{___GUIDCA___}",
         "Type":"Authority",
         "X509":"aa
bb
cc"
      },

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne