Sed avec étiquette et substition

Résolu
Bonjour,

J'aurais encore besoin de votre aide avec la commande sed.

Je souhaiterai avec la commande sed commenter certaines lignes d'un programme pour cela les lignes sont repérer avec une étiquette stocké dans num.
Au préalable j'ai numéroté les lignes de mon programme avec la commande "nl" pour pourvoir les repérer avec l'étiquette.
exemple de lignes d'un fichier temp à commenter :

1 exemple de
2 programme
3 pour la commande sed

Je souhaite commenter la 3eme lignes de maniere à ajouer "C" devant la phrase de la maniere suivante :
1 exemple de
2 programme
3 C pour la commande sed

Pour cela j'utilise un programme fortran dans lequel j'appelle la commande sed avec la fonction "call system"

Voici le bout de programme

/-----------------------------
num ='3 '
field= 'pour'

command = 'sed -i " '//num//' s/'//field//'/C '//field//'/" temp'

print*, 'command =',command
call system(command)
/---------------------------------------------------------

Cette commande marche de manière tres aléatoire.
Auriez vous une commande ou une méthode plus appropriée

Merci de votre aide

2 réponses

  1. Contributeur
    Salut,

    Au préalable j'ai numéroté les lignes de mon programme avec la commande "nl" pour pourvoir les repérer avec l'étiquette.

    A quoi bon ?
    sed
    sait faire cela nativement.

    $ cat plop 
    exemple de
    programme
    pour la commande sed

    $ sed '3 s/^/C /' plop
    exemple de
    programme
    C pour la commande sed

    $ n=3;sed "${n} s/^/C /" plop
    exemple de
    programme
    C pour la commande sed
    1. Merci pour ta réponse,
      quand j'utilise cette 'sed -i "${n} s/^/C /" temp' dans mon programme, ça me commente toutes les lignes ..
      Il me semble qu'il ne comprend pas l'étiquette ${n}

      Merci
      1. Contributeur
        Il me semble qu'il ne comprend pas l'étiquette ${n}
        La variable
        $n
        est bien déclarée auparavant ?
      2. J'ai réussi, en fait la commande sed est une chaîne de caractere dans mon programme fortran. La solution est de remplacer ${n} par //n//' . je fais une concatenation avec la variable n

        et ça donne
        command ='sed -i "'//n//'s/^/Cn /" temp'
        call system(command)

        Merci pour ton aide