Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 12/10/2012, à 21:36

sabnac

[RESOLU]Aide commande Sed

Bonjoue à tous!

J'ai besoin de votre aide sur une commande SED.

J'ai un fichier texte qui contiens du html, seule quelques chaines de caractères  m'interesse et je voudrais les extraire avec une commande sed.
par exemple j'ai la ligne suivante:

"author_name":"Paul","thread_name":"Paul","snippet":"texte_isoler\n","message":"texte_isoler\n",

Je veux le découper de la manière à obtenir ceci:
"snippet":"texte_isoler\n"

Je fais donc la commande sed suivante

sed -e 's/.*\("snippet":".*\),".*/\1/g' test
"snippet":"texte_isoler\n"

Le résultat est donc ok.
Maintenant je souhaiterais pouvoir obtenir ceci:

"author_name":"Paul" message":"texte_isoler\n"

Je n'y arrive pas, pourriez vous m'aider?


Merci d'avance

Dernière modification par sabnac (Le 13/10/2012, à 23:57)

Hors ligne

#2 Le 12/10/2012, à 21:57

nesthib

Re : [RESOLU]Aide commande Sed

La façon la plus propre de faire à mes yeux est :

sed 's/.*"author_name":"\([^"]*\)".*"snippet":"\([^"]*\)".*/"author_name":"\1" message":"\2"/' fichier

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 12/10/2012, à 22:12

sabnac

Re : [RESOLU]Aide commande Sed

Merci nesthib pour cette réponse rapide. Je n'arrive pas à comprendre comment fonctionne la commande.

Pourrais tu me donner quelques explications? Notamment sur cette partie:
\([^"]*\)

Hors ligne

#4 Le 12/10/2012, à 22:41

nesthib

Re : [RESOLU]Aide commande Sed

[…] ← n'importe quel caractère parmi …
^… ← inversion du groupe … (donc ici, tout sauf un double guillemet)
…* ← 0 fois ou plus le caractère/groupe … précédent
\(…\) ← garde en mémoire l'expression trouvée qui correspond à …

en résumé, ça garde en mémoire dans \1 (ou \2) une suite de caractère qui ne comporte pas de « " » et qui est elle même entourée de ces guillemets "\([^"]\)"


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 13/10/2012, à 22:37

sabnac

Re : [RESOLU]Aide commande Sed

Merci Nesthib. Maintennt je suis dans la deuxième phase de mon problème.


En effet j'ai un fichier texte de 34 M où le but est d'extraire ces deux chaînes de caractères à chaque fois qu'elles se présentent de la manière suivante:

"author_name":"Paul" message":"texte_isoler\n"
"author_name":"Paul" message":"texte_isoler\n"
"author_name":"Paul" message":"texte_isoler\n"
"author_name":"Paul" message":"texte_isoler\n"

Et cela n'a pas l'air de fonctionner. Je ne sais pas comment faire le traitement multiligne. J'ai bien tenté ce qui est expliqué sur le site suivant mais sans succès
http://www.siteduzero.com/tutoriel-3-28 … e-sed.html


Je peux encore solliciter ton aide et si possible ton explication?

Merci d'avance.

extrait

Hors ligne

#6 Le 13/10/2012, à 22:44

nesthib

Re : [RESOLU]Aide commande Sed

peux-tu donner un extrait de ton fichier et expliquer clairement le résultat attendu ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 13/10/2012, à 23:57

sabnac

Re : [RESOLU]Aide commande Sed

En fait ça a fonctionné je me suis juste trompé de fichier à la relecture, probablement que le fait qu'il soit 1 heure du mat y est pour quelquechose big_smile

Merci encore nesthib:)

Hors ligne

Haut de page ↑