Script shell unix pour modifier un fichier

fab -  
 Dieng -
Script shell unix pour modifier un fichier
Bonjour,
je cherche comment écrire un script shell pour modifier un fichier; en gros mon fichier source ressemble à:
entête
ligne 1
ligne 2
...
Et moi je voudrais obtenir un nouveau fichier avec:
entête ligne 1
entête ligne 2
...

merci de votre aide
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    voilà avec perl en ligne de commande
    dans ce cas je préfère quand même la version de jipicy (en plus c'est shell qui est demandé, même pas sed :-DDD )
    on peut dire merci aussi à jisisv pour sa solution

    ma solution s'en fiche de ce qu'il y a écrit en entête
    il lit la 1ère ligne quelque soit son contenu
    le fichier d'origine ne change pas
    je stocke le résultat dans le fichier resultat
    perl -ne '/(.*)/ if 1..1;print"$1 $_"if 2..eof' fichier > resultat
    --
    lami20j
    2
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Avec perl
    johan@johan:~/src/perl$ cat entete.pl
    #!/usr/bin/perl -w
    $entete=<>;
    chomp($entete);
    while(<>)
    {
            print $entete. ' '. $_;
    }
    johan@johan:~/src/perl$ ./entete.pl entete.pl
    #!/usr/bin/perl -w $entete=<>;
    #!/usr/bin/perl -w chomp($entete);
    #!/usr/bin/perl -w while(<>)
    #!/usr/bin/perl -w {
    #!/usr/bin/perl -w      print $entete. ' '. $_;
    #!/usr/bin/perl -w }
    
    

    Johan
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    sed -i "1d;s/.*/entête &/" fichier
    ;-))
    0
  4. fab
     
    merci jp !
    par contre comment je dis que entete c'est la 1ere ligne du fichier ?
    (tu l'auras deviné, je suis pas balaize en sed ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Je suis pas sûr d'avoir tout compris là ;-\
    Ce que je comprends c'est que tu ne sais pas ce qui se trouve dans la première ligne de ton fichier ? Si c'est ça alors :
    var=$(sed -n 1p fichier.txt) && sed '1d;s/.*/'$var' &/' fichier.txt
    ;-))
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      tu n'a pas oublié l'option -i pour la modification sur place?!
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Salut,

        Oui et non ;-))

        Disons que quand je fais mes essais je ne l'utilise pas toujours, et donc quand je copie/colle ma ligne de commande, elle y est ou elle n'y est pas ;-))

        Merci de l'avoir souligné ;-)
        0
  7. fab
     
    Merci ! c'est exactement ce dont j'avais besoin !
    0
  8. fab
     
    une dernière chose les gars !? 2 en fait ;-)
    1.après l'entête sur chaque ligne s'ajoute un caractère ^M; comment faire pour le virer ?
    2. pkoi j'arrive pas à mettre cette mm ligne de commande dans un shell ? (avec $1 comme nom de fichier)
    merci
    a+
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    1 - Le ^M ([CTRL+V] + [CTRL+M]) est la représentation du retour chariot sous Windows. Pour le virer il suffit de faire (en tapant les caractères comme signifié ci-dessus) :
    sed 's/^M$//' fichier
    2 - Affiche nous ton script qu'on essaie de voir ce qui cloche.

    ;-))
    0
    1. Dieng
       
      Bonjour,

      Je doit réaliser un script qui me lit des informations sur deux fichiers différents pour les concaténer ensuite dans un troisième fichier.
      Mon problème est que je dois extraire une adresse Mac du premier fichier et il est de la forme: 0-12-3F-BD-50-21

      Pour ensuite l'utiliser dans le deuxième fichier afin d'extraire l'adresse IP correpondant: sauf que dans le deuxième fichier ce même adresse MAC est de la forme: 00:12:3f:bd:50:21

      Il me faut dont une commande pour transformer les"-" en":" , les"majuscule" en "minuscule" et aussi ajouter un zero devant.

      Merçi.
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > Dieng
         
        Salut,
        $ echo $var
        0-12-3F-BD-50-21
        
        $ echo $var | tr 'A-Z' 'a-z' | sed 's/-/:/g;s/.*/0&/'
        00:12:3f:bd:50:21
        ;-))
        0
      2. Dieng > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merçi,

        ça marche.

        thanks you very much!!!!!
        0
  10. fab
     
    salut jipicy,
    2. c'est bon, j'ai vu, ça marche
    1. ben y'a tjs des ^M dans le fichier après ta commande... !???
    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie
    perl -pi.orig -e 's/\r//' fichier
    --
    lami20j
    0