QUestion sur sed et awk

enzo -  
jisisv Messages postés 3678 Statut Modérateur -
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. major
     
    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
  2. eric
     
    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
  3. eric
     
    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
  4. jean-michel
     
    cat fichier | sed "/attachement/,\$ w autre.fic"
    tu peux meme faire de chaine1 a chaine2
    sed "/chaine1/,/chaine2/w toto"
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Chris
     
    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
  7. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    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
  8. jisisv Messages postés 3678 Statut Modérateur 936
     
    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