Opération sur numero de ligne

Résolu
Bonjour,

J'ai lu divers sujets sur la numérotation de ligne d'un fichier qui m'ont bien aidé.
Je voudrai pouvoir afficher une ligne en faisant des opérations sur les numéros :s
Je m'explique pour que ça soit plus clair ^^

exemple :

fichier texte toto.txt contenant :

le fichier tata.txt
a bien
été enregistré
nous vous remercions
veuillez passer une
bonne fin de journée

je cherche dans le fichier tata.txt , la chaîne "a bien" en faisant :
ligne=$(grep -n 'a bien' tata.txt | cat -d:f1);

Par rapport a cette ligne où se trouve la chaîne, je souhaiterai récupérer la 3eme ligne (et nom pas le numéro) après celle-ci
Donc en gros un $ligne=$ligne+3 pour récupérer dans une variable la chaine "veuillez passer une"

Merci

5 réponses

  1. Modérateur
    Salut,

    Une solution parmi d'autres avec "sed" :

    jp@MDK:~/tmpfs ssh$ cat plop
    le fichier tata.txt
    a bien
    été enregistré
    nous vous remercions
    veuillez passer une
    bonne fin de journée
    
    jp@MDK:~/tmpfs ssh$ ligne="a bien"
    
    jp@MDK:~/tmpfs ssh$ var=$(sed -n '/'"${ligne}"'/{n;n;n;p}' plop)
    
    jp@MDK:~/tmpfs ssh$ echo ${var}
    veuillez passer une
    
    jp@MDK:~/tmpfs ssh$

    ;-))
    1. Un grand merci ça marche !

      Mais j'ai un autre problème pour ça je fais un exemple plus concret :

      fichier texte :

      transfert de toto.txt
      taille 400 ko
      vitesse 10ko/s
      transfert terminé
      transfer de toto.txt.1
      taille 400 ko
      vitesse 10ko/s
      transfert terminé

      Donc le problème en cherchant dans le fichier la chaine qui contient "toto.txt".
      Ça va m'afficher :

      transfert terminé transfert terminé

      En gros le fichier toto.txt.1 est la version antécédente que je garde et transfert.
      A la fin en gros je voudrais dans un fichier texte :

      détail du fichier toto.txt
      transfert terminé

      détail du fichier toto.txt.1
      transfert terminé
      1. Modérateur
        jp@MDK:~/tmpfs ssh$ cat plop
        transfert de toto.txt
        taille 400 ko
        vitesse 10ko/s
        transfert terminé
        transfer de toto.txt.1
        taille 400 ko
        vitesse 10ko/s
        transfert terminé
        
        jp@MDK:~/tmpfs ssh$ sed -n '/toto/{h;n;n;n;H;g;p}' plop
        transfert de toto.txt
        transfert terminé
        transfer de toto.txt.1
        transfert terminé
        
        jp@MDK:~/tmpfs ssh$

        ;-))
        1. Contributeur
          hello
          une solution avec awk
          $ cat a2
          transfert de toto.txt
          taille 400 ko
          vitesse 10ko/s
          transfert terminé
          transfer de toto.txt.1
          taille 400 ko
          vitesse 10ko/s
          transfert terminé 
          $ 
          $ awk '/toto/ {n=NR;print}; NR==n+3 {print}' a2
          transfert de toto.txt
          transfert terminé
          transfer de toto.txt.1
          transfert terminé 
          $