Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Insérer un fichier avec sed, spécifié par une variable

5 réponses
Avatar
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

5 réponses

Avatar
Nicolas George
Thomas Guignard wrote in message :
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... :-(



Montre-nous un peu plus du script, je ne pense pas que l'erreur soit dans la
ligne que tu as montrée.
Avatar
Thomas Guignard
Voilà tout le script:

#!/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()
{
<c'est là que je veux qu'il insère nomdufichier.js>

plein de trucs
}


--
Thomas Guignard
Central Library
Swiss Federal Institute of Technology, Lausanne
Avatar
Stephane CHAZELAS
2008-07-17, 15:30(+02), Thomas Guignard:
Voilà tout le script:

#!/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()
{
<c'est là que je veux qu'il insère nomdufichier.js>

plein de trucs
}


[...]

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
Avatar
Jacques L'helgoualc'h
Le 17-07-2008, Thomas Guignard a écrit :
Voilà tout le script:
[...]



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
Avatar
Thomas Guignard
Bonjour

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