Insérer un fichier avec sed, spécifié par une variable
Le
Thomas Guignard
Bonjour
Dans un shellscript, j'aimerais effectuer l'opération suivante:
sed "N;/function()/r $requiredfile" $1 > $outfile
(insérer le contenu du fichier dont le nom est dans la variable
$requiredfile au fichier $1 après function() et enregistrer le tout dans
$outfile).
Mais ça ne marche pas. Par contre, lorsque je spécifie le nom du fichier
qui est dans $requiredfile en toutes lettres, ça marche. J'ai essayé
avec des apostrophes simples, doubles, de mettre un \ devant le $, mais
rien n'y fait :-(
Comment faire?
Merci!
--
Thomas Guignard
Central Library
Swiss Federal Institute of Technology, Lausanne
Dans un shellscript, j'aimerais effectuer l'opération suivante:
sed "N;/function()/r $requiredfile" $1 > $outfile
(insérer le contenu du fichier dont le nom est dans la variable
$requiredfile au fichier $1 après function() et enregistrer le tout dans
$outfile).
Mais ça ne marche pas. Par contre, lorsque je spécifie le nom du fichier
qui est dans $requiredfile en toutes lettres, ça marche. J'ai essayé
avec des apostrophes simples, doubles, de mettre un \ devant le $, mais
rien n'y fait :-(
Comment faire?
Merci!
--
Thomas Guignard
Central Library
Swiss Federal Institute of Technology, Lausanne

Poser une question


Montre-nous un peu plus du script, je ne pense pas que l'erreur soit dans la
ligne que tu as montrée.
#!/bin/sh
requiredfile=`grep "@require" $1 | awk '{print $3}'`
outfile="out_"$1
sed "N;/function()/r $requiredfile" $1 > $outfile
***
Dans $1 il y a une ligne qui ressemble à
// @include nomdufichier.js
et plus bas
function()
{
plein de trucs
}
--
Thomas Guignard
Central Library
Swiss Federal Institute of Technology, Lausanne
[...]
Probablement un fichier au format Microsoft avec des r a la
find de chaque ligne.
C'est @required ou @include?
Tu peux faire:
awk '
function cat(f, line) {
while ((getline line < f) > 0)
print line
}
{
print
sub(/r$/, "")
}
/@require/ { required = $NF }
/function()/ && required != "" {
if ((getline) > 0) print
cat(required)
}' < "$1" > "out_$1"
--
Stéphane
Voilà une version Sed : (mais je n'ai pas traité le problème des fins de
lignes à la DOS)
#!/bin/sh
requiredfile="`awk '/@include/{print $3;exit}' <$1`"
outfile="out_$1"
sed -e '/function()/{
N
r '"$requiredfile"'
}' "$1" > "$outfile"
La version initiale regroupait systématiquement les lignes deux par deux,
cf. le résultat de la variante :
#sed -e "s/^/1 /;N;/function()/r $requiredfile" $1 > $outfile
Avec le style
function() {
# insertion ici
...
}
la commande N devient inutile,
sed -e "/function()/r $requiredfile" "$1" > "$outfile"
--
Jacques L'helgoualc'h
Le problème venait en-effet de la mauvaise conversion DOS->UNIX...
Le diable est toujours dans les détails. Merci beaucoup pour votre aide!
--
Thomas Guignard
Central Library
Swiss Federal Institute of Technology, Lausanne