Extraction de plusieurs lignes avec shell

salut a tous
je programme un script shell
et je voulai extraire plusieurs lignes successive
par exemple de ligne 22 à la ligne 29 d'un fichier de 44 lignes
merci de m'avoir aider
Configuration: fedora 4

5 réponses

  1. Modérateur
    recuperer tout les lignes entre le debut et la fin
    sed  -n '/^Cacert::/,/==$/p'
    ;-))
    5
    1. merci de m'aider
      ca na pas marcher "recuperer tout les lignes entre le debut et la fin
      sed -n '/^Cacert::/,/==$/p' "
      $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      merci une autre fois ;)

      sed -n '$a,29p' fichier

      elle ne donne pas de resultat

      avec a=24 qui est un numeros d'une ligne extrait par : a=` cut -d: -f1 fich `

      merci de m'aider
      $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      0
    2. Salut merci de vos conseil

      Je cherche a retarder l'execution d'une fonction sans que ça bloque
      l'ensemble de mon script (comme le fait un sleep)?

      Merci d'avance
      0
  2. Modérateur
    Salut,
    sed -n '22,29p' fichier
    ,-))
    0
    1. merci pour votre aide

      voila le fichier
      ::::::::::::::::::::::::::::::::::::::::::::::::::::
      aazezer++ frezdsfggerghedtghghetyhy
      tgergdfjotgerktlerotjhktgsrlkdgdlsfkg
      gdsgs gdgdf ergerg greg gerghrtghrtth
      gergdfgdfg rgertgdegde gergerger==
      gdfgdgbvdfgbdfgdf,gdfgdfgdfgdf;gdf
      ::::::::::::::::::::::::::::::::::::::::::::::::::::::
      je veux eliminer les caractere avant ++
      puis mettre le résultat entre deux lignes d'un autre fichier
      merci
      0
  3. Modérateur
    Re-

    je veux eliminer les caractere avant ++
    sed 's/.*++ //' fich > plop
    puis mettre le résultat entre deux lignes d'un autre fichier
    sed -i.bak '/motif/r plop' fichier
    Ajoute le fichier "plop" (commande "r" pour "read") après la ligne contenant "motif" dans le fichier "fichier". L'option "-i.bak" crée une sauvegarde du fichier original.
    0
    1. mercie bien
      le probleme rencontrer c'est que les lignes à extraire peut etre repeter dans le fichier mais il non pas le meme contenue malgré qu'il ont le meme debut (Cacert::)et la meme fin(==)
      alors je veut recuperer tout les lignes entre le debut et la fin et les mettre chacun dans un fichier independant
      *************************************************
      Cacert:: jkyhniuybytbyutnuitynuy,iu,
      ,iuy,iuy,oiu;utgnrtbrtfrbtfr
      uyntybyrbvtrbrt,i==
      rtvetyvbuyniu,oiuiu
      trbrtvrtcvrcr
      Cacert:: yytyiuooiuoiu,oiopi,gnfff
      dertvezrtvevtrte
      revtrertevrterevr==
      tyevrevretyrtv
      ****************************************
      Mercie bien de m'aider
      0
  4. Modérateur
    Salut

    pour sed -n '$a,29p' fichier

    elle ne donne pas de resultat

    essaie
    lami20j@debian:~/trash$ cat fichier
    ligne 1
    ligne 2
    ligne 3
    ligne 4
    ligne 5
    ligne 6
    ligne 7
    ligne 8
    ligne 9
    ligne 10
    lami20j@debian:~/trash$ echo $a
    2
    lami20j@debian:~/trash$  sed -n $a',5p' fichier
    ligne 2
    ligne 3
    ligne 4
    ligne 5
    
    0
    1. Modérateur
      Oui, ou encore avec des doubles quotes :
      sed -n "$a,5p"
      Merci lami20j ;-))
      0
    2. @jipicymerci a tous

      je veux parcourir un fichier FICH pour extraire les numéros des lignes
      des meme phrases (XXX) cad :

      ****************************
      FICH
      XXXazozozpzozpopoapzopzopao <-------------
      XXXauazoz,oiz,zoizomiomaoapap <--------------
      oziozozizoaoizjhdhdhdj
      djijkjhdhduizhdbh
      XXXoieyfnyuieyrufy <----------------
      ********************************
      et mettre ces numeros qui sont (1,2,5) chaqu'un dans un fichier

      **************************************************
      je veux connettre comment realiser un boucle dans un shell
      exemple (algorithmique)

      for i=(numeros ou caractere) to (numeros ou caractere)
      do .........
      ********************
      comment comparer le contenus de deux fichiers
      ********************
      Merci a tous ;-(
      0
    3. Modérateur
      @anis_telSalut,

      il y a des commandes pour faire ça
      si tu veux apprendre des algorithme alors essaie de trouver un bon cours

      dans ton cas tu peux faire une boucle que va incrementer un compteur

      Voilà pour ton algo
      i = 0
      Tant qu'on n'est pas à la fin de fichier
         si la ligne commence avec XXX
           affiche " i+1 ligne"
         sinon
           affiche "ligne"
         On increment i (i = i + 1)
      Fin Boucle

      comment comparer le contenus de deux fichiers
      man diff
      0
  5. Modérateur
    ca na pas marcher "recuperer tout les lignes entre le debut et la fin
    sed -n '/^Cacert::/,/==$/p' "


    Ben, ça marche
    Le problème ce n'est pas la commande mais les lignes ou plutôt le groupe des lignes (je ne peux pas dire paragraphe) ou la façon dont tu poses la question

    la commande extrait tout entre
    Cacert:: et ==
    si tu regarde ton fichier tu as
    Cacert:: jkyhniuybytbyutnuitynuy,iu,
    ,iuy,iuy,oiu;utgnrtbrtfrbtfr
    uyntybyrbvtrbrt,i==
    rtvetyvbuyniu,oiuiu
    trbrtvrtcvrcr
    Cacert:: yytyiuooiuoiu,oiopi,gnfff
    dertvezrtvevtrte
    revtrertevrterevr==
    tyevrevretyrtv 
    donc le résultat est correct
    lami20j@debian:~/trash$ cat fichier
    Cacert:: jkyhniuybytbyutnuitynuy,iu,
    ,iuy,iuy,oiu;utgnrtbrtfrbtfr
    uyntybyrbvtrbrt,i==
    rtvetyvbuyniu,oiuiu
    trbrtvrtcvrcr
    Cacert:: yytyiuooiuoiu,oiopi,gnfff
    dertvezrtvevtrte
    revtrertevrterevr==
    tyevrevretyrtv
    lami20j@debian:~/trash$ sed -n '/^Cacert::/,/==$/p' fichier
    Cacert:: jkyhniuybytbyutnuitynuy,iu,
    ,iuy,iuy,oiu;utgnrtbrtfrbtfr
    uyntybyrbvtrbrt,i==
    Cacert:: yytyiuooiuoiu,oiopi,gnfff
    dertvezrtvevtrte
    revtrertevrterevr==
    

    0