Pages : 1
#1 Le 19/02/2014, à 13: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, à 15: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, à 10: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, à 10:33)
En ligne
#4 Le 20/02/2014, à 12: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
Pages : 1