Suppression ligne shell unix

Résolu
sacan76 Messages postés 6 Statut Membre -  
sacan76 Messages postés 6 Statut Membre -
Bonjour,

Voilà je n'ai pas pratiqué le shell depuis l'école d'ingé et je suis un peu perdu.

J'ai un répertoire contenant 30 fichiers texte de req01.txt à req30.txt. Le but est de supprimer la 3ème ligne de chaque fichier.

J'utilise cette commande sed '3d' req01.txt > req01_def.txt

Y-a-t'il une moyen de gérer l'ensemble des 30 fichiers sas passer par un fichier *_def.txt.

Merci de votre aide.

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    sed -i.bak '3d' req*.txt
    devrait le faire ;-))

    PS. Le ".bak" est facultatif, il crée juste une copie de chaque fichier modifié au cas ou...
    0
  2. sacan76 Messages postés 6 Statut Membre
     
    Merci pour ta réponse rapide.

    Mais quand je tape la commande il me met "sed: illegal option -- i", je n'ai peux être pas la même version de shell que toi.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      C'est ta version de sed qui doit être inférieure à la v4.0.5 (qui introduit l'option "-i" (modification en place)).

      Il faudrait voir avec "ed" à ce moment là...

      Je jette un oeil et je reviens ;-))
      0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Tiens ça devrait faire l'affaire :
    #! /bin/bash
    
    #set -xv
    
    for fich in req*.txt
    do
    ed $fich <<EOF
    3d
    w
    .
    EOF
    done &>/dev/null
    ;-))

    Edit : Rajout de "&>/dev/null"
    0
    1. sacan76 Messages postés 6 Statut Membre
       
      Merci... C'est parfais.
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > sacan76 Messages postés 6 Statut Membre
         
        De rien ;-))
        0
      2. sacan76 Messages postés 6 Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Bonjour,

        Je viens de faire plusieurs test et je ne sais pas pk mais seulement une partie des fichier req*.txt sont pris en compte.

        Et je dois de plus supprimer la 1ère ligne maintenant.

        Sed marche très bien mais malheuresment je suis obligé de passer par un fichier temporaire. On ne peux pas le faire plus rapidement.

        Merci de votre aide
        0
      3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > sacan76 Messages postés 6 Statut Membre
         
        mais seulement une partie des fichier req*.txt sont pris en compte.
        Ils sont tous de la même forme ces fichiers "req*.txt" ?

        Sed marche très bien mais malheuresment je suis obligé de passer par un fichier temporaire. On ne peux pas le faire plus rapidement.
        Sans l'option "-i" non ;-((
        0
      4. sacan76 Messages postés 6 Statut Membre > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        C'est juste au niveau de la longeur des fichiers que ca change, mais c'est vrai quand il n'ont pas la longeur pas "défaut" (100 carractère) ce ne marche pas.

        Sinon j'ai pensé à cette solution :

        for i in req*.txt
        do
        sed -e '1d' req*.txt > req.tmp
        sed -e '2d' req.tmp > req*.txt
        done
        &>/dev/null

        le problème s'est que je ne sais pas comment le faire boucler pour prendre le req01.txt, req02.txt etc...
        0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    for i in req*.txt
    do
    sed -e '1d' "${i}" > req.tmp
    sed -e '2d' req.tmp > "${i}"
    done &>/dev/null 
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sacan76 Messages postés 6 Statut Membre
     
    merci pour ta réponse...

    il me manquait le "${i}". J''étais entrein de lire des cours sur le shell...

    Je vais continuer pour la forme.

    Encore merci.
    0