Traitement de fichier en Bash

Résolu
marie54 -  
 Marie54 -
Bonjour,

J'aimerais savoir comment je peux faire ça :

Voici mon fichier:
vdg121 421321 54512
fsd 2131ef2sd12
szdz4421
4212
212
Chaine
54215th trybtf2512
54212fhfgb 5212 vg
hk4121 254bhj hgj
Chaine2
fgdtb 121 121 dsfd
dgfchb 121 fdtgd5f4

J'aimerais couper les lignes en dessous Chaine mais sans ce qu'il y a en dessous de Chaine2 et les mettre dans un fichier texte.

Voici ce que je voudrais avoir dans l'autre fichier:

54215th trybtf2512
54212fhfgb 5212 vg
hk4121 254bhj hgj

Merci de votre aide

1 réponse

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    jp@MDK:~/tmpfs ssh$ cat plop
    vdg121 421321 54512
    fsd 2131ef2sd12
    szdz4421
    4212
    212
    Chaine
    54215th trybtf2512
    54212fhfgb 5212 vg
    hk4121 254bhj hgj
    Chaine2
    fgdtb 121 121 dsfd
    dgfchb 121 fdtgd5f4
    jp@MDK:~/tmpfs ssh$ sed -n '/Chaine/,/Chaine2/{//d;p}' plop
    54215th trybtf2512
    54212fhfgb 5212 vg
    hk4121 254bhj hgj
    jp@MDK:~/tmpfs ssh$

    ;-))
    1
    1. marie54
       
      Merci de ta réponse, et surtout d'y réponde vite :-D, car j'étais vraiment bloqué.
      0
    2. Marie54
       
      Pourrais tu m'expliquer la ligne s'il te plaît. Et j'aimerais savoir, c'est possible de faire ce traitement dans un fichier ce trouvant dans une clef USB? Car j'y arrive pas.
      Merci
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      -n
      Affichage conditionné. On affiche le résultat que sur demande avec le flag "p" (voir plus loin)


      /Chaine/,/Chaine2/
      Recherche des lignes comprises entre "/motif1/" et "/motif2/", y compris les motifs.


      {
      Regroupement de commandes (entre accolades) devant s'appliquer à la recherche.


      //d
      Les "//" représentent la mise en correspondance précédente d'une chaîne de caractères, autrement dit dans ton cas, elles représentes successivement "/Chaine/" et "/Chaine2/", auxquelles on applique la commande "d" (delete), afin de satisfaire à la condition initiale


      p
      On affiche les motifs correspondants aux critères...


      }
      Fin du regroupement de commandes.





      Pour ta 2è question, si la clé est montée, il suffit soit de donner le chemin complet vers le fichier, soit de se rendre dans le dossier (cd /chemin/clé/répertoire) et de lancer la commande ensuite...
      0
    4. Marie54
       
      Merci beaucoup je vais voir si en mettant l'emplacement du fichier ça marche mieux.
      0
    5. Marie54
       
      Ca ne marche toujours pas. Voici mon code:
      if [ "$1" = "telechargement" ]; then
      cd /usb/$1/
      mv "/var/log/$1/$2."* "/usb/$1/"
      mv "/usb/$1/$2" "/usb/$1/$1-$port-$nom_fich.txt"
      cd /usb/$1/$1-$port-$nom_fich.txt
      sed -n "/P18/,/C04/{//d;p}" "$1-$port-$nom_fich.txt" >> $1-$port-$nom_fich.txt.reca
      tar -czf "sauvegarde/$1-$port-$nom_fich.tar.gz" "$1-$port-$nom_fich.txt" "$1-$port-$nom_fich.txt.reca" "$2."*
      rm "$1-$port-$nom_fich.txt" "$1-$port-$nom_fich.txt.reca" "$2."*
      fi
      }
      Merci de ton aide. Ce que je voudrais c'est récupérer des données qui se trouvent dans $1-$port-$nom_fich.txt, en faire un fichier a part, et ensuite compresser le tout dans un dossier.
      0