QUestion sur sed et awk

SAlut,

Je recherche a recuperé toute les lignes se situant aprés le mot attachment dans un fichier .
Exemple de fichier

helllo
azkkdlmlf
llfllfjfjjf
attachment:
photo.zip
lettre.zip

Je n'arrive pas a trouver exactement la bonne syntaxe avec sed et awk pour effectuer cela ...

Merci les amis pour votre aide ..

7 réponses

  1. voici la reponse :

    NUMERO_LIGNE=$(less $NomFichier | grep -n Attachement | awk 'BEGIN {FS=":";} {print $1;}')

    less $NomFichier | sed 's/^V@//g' | sed "1,$NUMERO_LIGNE d" >>liste_des_fichiers_attach.tmp

    @+
    0
    1. il faut que tu fasse un programme shell/perl ou autre
      du style

      en shell:

      #!/bin/bash
      # ton shebang eventuel
      flag=0
      while read line
      do
      if [ "$line" ne "attachment" ] ; then
      flag=1
      fi

      if [ flag eq 1 ]; then
      echo "$line" > sortie
      fi
      done < monfichier

      bon c'est simple mais pas efficase si tes fichiers sont enormes
      le perl peut etre plus adapte.

      en awk ca doit pouvoir se programmer le plus simple c'est encore
      de se procurer un Oreilly bash ou awk ou une doc du net.

      Bonne chance.
      0
      1. a propose des expressions reg j'ai jamais reussi
        a faire un regex sur des lignes multiples
        j'ai un programme en perl qui permet de le faire
        mais c'est toujours sur une detection type flag

        while ligne
        if (ligne = ^(attchment) )
        flag=1......

        mail moi si ca t'interesse
        0
        1. cat fichier | sed "/attachement/,\$ w autre.fic"
          tu peux meme faire de chaine1 a chaine2
          sed "/chaine1/,/chaine2/w toto"
          0
          1. Salut

            Si les données sont dans le fichier toto faire ce qui suit :

            ed -s >/dev/null <<!fin
            r toto
            /^attachement
            -1
            1,.d
            w
            q
            !fin

            Au final, on a supprimé du fichier toto, tout ce qui précède attachement

            BOn courage
            0
            1. Webmaster
              Salut à tous,

              Bon pour aller au plus court:
              tac ton_fichier | awk '/attachment:/ {exit}; {print $0}'


              tac:
              Comme cat, mais en commencant par la fin du fichier (ca peut etre trés utile)

              awk '/attachment:/ {exit}; {print $1}':
              on se branche sur la sortie standard de tac, si l'on trouve "attachement:" on sort, sinon on affiche la ligne :)

              Voili voilou, @++
              "Si c'est stupide et que ça marche,
                      alors ce n'est pas stupide"
              0
              1. Modérateur
                et le plus simple

                sed -ne '/^attachment/,$ p' tonfichier |tail +2

                élimine éventuellement les occurences supplémentaires de attachment avev grep -v ...)
                Johan

                The software said "Requires Windows98, Win2000, or better,
                So I installed Unix.
                0