Utilisation de sed et grep
Résolu/Fermé
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
-
25 févr. 2010 à 11:40
Poireau007 Messages postés 83 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 17 octobre 2012 - 25 févr. 2010 à 13:43
Poireau007 Messages postés 83 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 17 octobre 2012 - 25 févr. 2010 à 13:43
A voir également:
- Utilisation de sed et grep
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Impossible d'utiliser ce numéro de téléphone pour la validation - Forum Gmail
- Impossible d'utiliser numéro de téléphone validation - Forum Gmail
- Désolé l'utilisation de la base de données a expiré epic games - Forum Jeux vidéo
10 réponses
Ro&ri
Messages postés
683
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
18 avril 2011
77
25 févr. 2010 à 11:48
25 févr. 2010 à 11:48
ro1ri@bt:~$ vim monfichier ro1ri@bt:~$ cat monfichier v id="contenu"> <h2>MON TITRE</h2><br> MON TEXTE QUE JE VEUX RECUPERER, MAIS J'Y ARRIVE PAS <br><br> <center> <a href="index.html"> code code code code ro1ri@bt:~$ grep TEXTE monfichier MON TEXTE QUE JE VEUX RECUPERER, MAIS J'Y ARRIVE PAS ro1ri@bt:~$
Ce n'est qu'un exemple. Si tu veut récupérer toutes les lignes contenant "texte" quelque soit la case ::
ro1ri@bt:~$ grep -i texte monfichier MON TEXTE QUE JE VEUX RECUPERER, MAIS J'Y ARRIVE PAS ro1ri@bt:~$
Ensuite pour renvoyer le résultat dans un fichier texte, >> fichier_sortie à la fin de ta ligne.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
25 févr. 2010 à 12:20
25 févr. 2010 à 12:20
jp@MDK:~/tmpfs ssh$ cat Poireau007 <div id="contenu"> <h2>Nouvelle banquette pour la 207</h2><br> La peugeot 207 fait peu neuve avec 3 nouveaux motifs de siège. on se souvient des précédentes versions...BLA BLA BLA. <br><br> <center> <a href="index.html"> jp@MDK:~/tmpfs ssh$ sed -n '\|<div id="contenu">|{n;n;p}' Poireau007 La peugeot 207 fait peu neuve avec 3 nouveaux motifs de siège. on se souvient des précédentes versions...BLA BLA BLA. jp@MDK:~/tmpfs ssh$
;-))
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
25 févr. 2010 à 12:30
25 févr. 2010 à 12:30
ça me dit :
le 'é' c'est une extra caractere ???
sed: 1: "\|<div id="contenu">|{n ...": extra characters at the end of p command
le 'é' c'est une extra caractere ???
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
>
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
25 févr. 2010 à 12:37
25 févr. 2010 à 12:37
Tu es sur MAC ?
Quelle version de sed ?
Quel shell ?
Rajoute un ";" après le "p" :
Quelle version de sed ?
Quel shell ?
Rajoute un ";" après le "p" :
{n;n;p;}
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
25 févr. 2010 à 13:06
25 févr. 2010 à 13:06
Heu oui, désolé j'aime les mac ! :)
ma version c'est bash-3.2 sous snow panther
Ben avec le ; ça marche !!! merci !!
Bon sinon j'aimerais bien comprendre ton expression :)
sed -n # ca c'est pour ne pas traiter les lignes une à une, mais tout le bloc, si j'ai bien compris
'\| #la ca doit etre pour dire le terme suivant est un pattern
<div id="contenu"> #ben ca c'est le pattern
|{n;n;p}' # heu la je voit pas du tout, c'est pas des options... et pourquoi ca ne grep que mon texte et pas le reste ??
Poireau007 #ca c'est mon fichier
Merci à tous vous 2 !
ma version c'est bash-3.2 sous snow panther
Ben avec le ; ça marche !!! merci !!
Bon sinon j'aimerais bien comprendre ton expression :)
sed -n # ca c'est pour ne pas traiter les lignes une à une, mais tout le bloc, si j'ai bien compris
'\| #la ca doit etre pour dire le terme suivant est un pattern
<div id="contenu"> #ben ca c'est le pattern
|{n;n;p}' # heu la je voit pas du tout, c'est pas des options... et pourquoi ca ne grep que mon texte et pas le reste ??
Poireau007 #ca c'est mon fichier
Merci à tous vous 2 !
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
>
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
25 févr. 2010 à 13:34
25 févr. 2010 à 13:34
-n
Non, ça c'est pour un affichage uniquement sur commande, ce paramètre marche en binôme avec le "p" de fin de l'expression. Donc on n'affiche sur la sortie standard (l'écran) que ce qu'on demande implicitement avec la commande "p" (print)
\|
Ca c'est le caractère délimiteur pour le motif. Par défaut c'est un slash '/', mais comme le motif était susceptible d'en contenir un (de slash), on définit un nouveau caractère délimiteur (le pipe '|' ici) en le protégeant par un anti-slash.
<div id="contenu">
Le motif recharché.
|
Caractère délimiteur de fin (pour le motif)
{
Début d'un regroupement de commande qui ne seront appliquées qu'au motif précédent.
n
Commande next. Cette commande en fait vide la mémoire principale de son contenu (en l'envoyant normalement sur la sortie standard, mais comme on a demandé un affichage explicite, elle part dans les choux) et la remplace par la ligne suivante.
n
On recommence puisque c'est la seconde ligne après le motif qui nous intéresse.
p
On affiche le résultat.
}
Fin du regroupement de commandes.
Pour de plus amples détails sur SED :
Sed - Introduction à SED - Part I
Sed - Introduction à SED - Part II
Sed - Introduction à SED - Part III
Non, ça c'est pour un affichage uniquement sur commande, ce paramètre marche en binôme avec le "p" de fin de l'expression. Donc on n'affiche sur la sortie standard (l'écran) que ce qu'on demande implicitement avec la commande "p" (print)
\|
Ca c'est le caractère délimiteur pour le motif. Par défaut c'est un slash '/', mais comme le motif était susceptible d'en contenir un (de slash), on définit un nouveau caractère délimiteur (le pipe '|' ici) en le protégeant par un anti-slash.
<div id="contenu">
Le motif recharché.
|
Caractère délimiteur de fin (pour le motif)
{
Début d'un regroupement de commande qui ne seront appliquées qu'au motif précédent.
n
Commande next. Cette commande en fait vide la mémoire principale de son contenu (en l'envoyant normalement sur la sortie standard, mais comme on a demandé un affichage explicite, elle part dans les choux) et la remplace par la ligne suivante.
n
On recommence puisque c'est la seconde ligne après le motif qui nous intéresse.
p
On affiche le résultat.
}
Fin du regroupement de commandes.
Pour de plus amples détails sur SED :
Sed - Introduction à SED - Part I
Sed - Introduction à SED - Part II
Sed - Introduction à SED - Part III
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
25 févr. 2010 à 13:43
25 févr. 2010 à 13:43
Ah ouais, c'est quand meme pas évident pour le n suivi du n...
Simpa la doc, je pensais pas que sed était aussi élaboré, pour moi c'étais un outil basic par rapport a awk.
Merci pour tes precisions !
Simpa la doc, je pensais pas que sed était aussi élaboré, pour moi c'étais un outil basic par rapport a awk.
Merci pour tes precisions !
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
25 févr. 2010 à 11:55
25 févr. 2010 à 11:55
Salut,
Peux-tu coller un exemple concret (un morceau de ton fichier) ?
Sinon, est-ce que le code se présente exactement comme ton exemple ci-dessus ? A savoir les sauts de lignes, les espaces, les balises, etc. ???
Peux-tu coller un exemple concret (un morceau de ton fichier) ?
Sinon, est-ce que le code se présente exactement comme ton exemple ci-dessus ? A savoir les sauts de lignes, les espaces, les balises, etc. ???
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
25 févr. 2010 à 12:13
25 févr. 2010 à 12:13
oui !
<div id="contenu">
<h2>Nouvelle banquette pour la 207</h2><br>
La peugeot 207 fait peu neuve avec 3 nouveaux motifs de siège. on se souvient des précédentes versions…….BLA BLA BLA.
<br><br>
<center>
<a href="index.html">
<div id="contenu">
<h2>Nouvelle banquette pour la 207</h2><br>
La peugeot 207 fait peu neuve avec 3 nouveaux motifs de siège. on se souvient des précédentes versions…….BLA BLA BLA.
<br><br>
<center>
<a href="index.html">
Ro&ri
Messages postés
683
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
18 avril 2011
77
25 févr. 2010 à 12:02
25 févr. 2010 à 12:02
Sinon en espérant que tu ais mis des retours à la ligne entre tes balises et ton texte, peut être un petit :
grep -v -E ^'<' monfichier
Par contre j'avoue que le résulta sera peu-être pas tip-top propre :/
grep -v -E ^'<' monfichier
Par contre j'avoue que le résulta sera peu-être pas tip-top propre :/
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
25 févr. 2010 à 12:17
25 févr. 2010 à 12:17
J'ai testé en fait ça fait comme un cat, ca me ressort tout le code de la page >> snif !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
25 févr. 2010 à 12:04
25 févr. 2010 à 12:04
Bonjour Ro&ri et merci pour ta réponse,
je ne comprend pas trop la solution que tu proposes, tu fais vim et ensuite cat c'est ça ? Comment je récupere mon texte sur tout mes fichiers ?
En fait au départ j'ouvre mes 500 fichiers avec :
c'est a partir de grep que c'est la cata !!
je ne comprend pas trop la solution que tu proposes, tu fais vim et ensuite cat c'est ça ? Comment je récupere mon texte sur tout mes fichiers ?
En fait au départ j'ouvre mes 500 fichiers avec :
for i in $(ls); do cat $i | grep qui marche pas >>res.txt; done
c'est a partir de grep que c'est la cata !!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
25 févr. 2010 à 12:08
25 févr. 2010 à 12:08
Merci de répondre au message #2.
Ro&ri
Messages postés
683
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
18 avril 2011
77
25 févr. 2010 à 12:17
25 févr. 2010 à 12:17
Alors désolé mon méssage #1 c'était une connerie, par contre si c'est un language balisé, essayes ::
Explications ::
-v demande à grep de ressortir toutes les lignes ne remplissant pas les conditions mises en parrametre
-r pour chercher dans tous les fichiers d'un dossier
-E pour dire à grep qu'on va utiliser des expressions régulières
^'<' chercher les lignes contenant < en début de ligne
En espérant que ça marche :-/
grep -v -r -E ^'<' ton_dossier >> resultat.txt
Explications ::
-v demande à grep de ressortir toutes les lignes ne remplissant pas les conditions mises en parrametre
-r pour chercher dans tous les fichiers d'un dossier
-E pour dire à grep qu'on va utiliser des expressions régulières
^'<' chercher les lignes contenant < en début de ligne
En espérant que ça marche :-/
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
25 févr. 2010 à 12:25
25 févr. 2010 à 12:25
Ah c'est marant ce truc je savais pas que tu pouvais grepper comme ça :)
Sinon ca me ressort plein de ligne dont je n'ai pas besoin...
ex :
Sinon ca me ressort plein de ligne dont je n'ai pas besoin...
ex :
fichier.html: fichier.html: fichier.html: <br><br> fichier.html: </div> fichier.html: <p> </p>
Ro&ri
Messages postés
683
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
18 avril 2011
77
25 févr. 2010 à 12:41
25 févr. 2010 à 12:41
Pour mon mrceau de code ou celui de jipicy ??
Peut-être en enlevant le ^ ?? Par contre ça risques de te virer quelques lignes de texte que tu aurais voulu garder ...
Peut-être en enlevant le ^ ?? Par contre ça risques de te virer quelques lignes de texte que tu aurais voulu garder ...
Poireau007
Messages postés
83
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
17 octobre 2012
15
25 févr. 2010 à 13:10
25 févr. 2010 à 13:10
Non le tiens,
quand j'enleve le ^ ca supprime mon texte, en effet.
peut etre que le texte est trop complexe (au niveau des caracteres)
quand j'enleve le ^ ca supprime mon texte, en effet.
peut etre que le texte est trop complexe (au niveau des caracteres)
Ro&ri
Messages postés
683
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
18 avril 2011
77
25 févr. 2010 à 13:25
25 févr. 2010 à 13:25
grep -v -r -E ^'<' ton_dossier | grep -v -E $'>' >> resultat.txt
La syntaxe est pas super mais sur mes test ça bug pas.
En fait on re grep le résultat en virant toutes les lignes finissant par un '>', ça plus une relecture avec 2~3 corrections a la mano, ça devrais passer.