Sed avec étiquette et substition

Résolu
bab1812 Messages postés 11 Statut Membre -  
bab1812 Messages postés 11 Statut Membre -
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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    0
  2. bab1812 Messages postés 11 Statut Membre
     
    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
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il me semble qu'il ne comprend pas l'étiquette ${n}
      La variable
      $n
      est bien déclarée auparavant ?
      0
    2. bab1812 Messages postés 11 Statut Membre
       
      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
      0