Discussion:
suppression de ligne "parasite"
(trop ancien pour répondre)
lauxeti
2012-01-10 10:34:20 UTC
Permalink
Bonjour à tous et meilleurs voeux,

Je souhaiterais avoir une aide pour la suppressionn de ligne

Voila le problème :

J'ai un fichier .txt , envoyé chaque semaine, qui contient des lignes
comme ceci:


C>
O>====================================================================Essai
======================================================================ttest1
test2
-------------------------------------------------------------------------------
1300 101:1635
C>
O>====================================================================Essai1
======================================================================ttest1
test2
-------------------------------------------------------------------------------
1600 101:1634



Je souhaiterais ne plus avoir dans le fichier de sortie

- les lignes commençant par O>===
- les lignes commençant par ===
- les lignes commençant par -------


Quelqu'un peut il
azrazer
2012-01-11 09:22:09 UTC
Permalink
Bonjour,
voulez-vous utiliser perl pour cela ? (s'il n'y a que cette tâche à
faire, ce n'est peut-être pas le meilleur outil)
Bref, voici deux solutions :
avec sed : sed -i '/^O>===\|^===\|^------/d' VOTREFICHIER.txt

en perl :
---8<-----------8<---------8<-------
use strict;
use warnings;
use File::Slurp;

my $filename = shift;

my $text = read_file($filename); # Slurp "meurt" s'il ne trouve pas le
fichier

$text =~ s/^O>===.*?$|^===.*?$|^------.*?$//mg; # cf. doc du modifier m

write_file($filename."out",\$text); # ecriture du fichier de sortie (on
#peut egalement ecraser le fichier original, bien sur


---8<-----------8<---------8<-------

(puis appeler le script sur le fichier)

Cordialement,
HTH,

azra.
Post by lauxeti
Bonjour à tous et meilleurs voeux,
Je souhaiterais avoir une aide pour la suppressionn de ligne
J'ai un fichier .txt , envoyé chaque semaine, qui contient des lignes
C>
O>====================================================================Essai
======================================================================ttest1
test2
-------------------------------------------------------------------------------
1300 101:1635
C>
O>====================================================================Essai1
======================================================================ttest1
test2
-------------------------------------------------------------------------------
1600 101:1634
Je souhaiterais ne plus avoir dans le fichier de sortie
- les lignes commençant par O>===
- les lignes commençant par ===
- les lignes commençant par -------
Quelqu'un peut il m'aider ?
Merci d'avance
Le Lauxeti
lauxeti
2012-01-11 09:30:38 UTC
Permalink
Post by azrazer
Bonjour,
voulez-vous utiliser perl pour cela ? (s'il n'y a que cette t che
faire, ce n'est peut- tre pas le meilleur outil)
avec sed : sed -i '/^O>===\|^===\|^------/d' VOTREFICHIER.txt
---8<-----------8<---------8<-------
use strict;
use warnings;
use File::Slurp;
my $filename = shift;
my $text = read_file($filename); # Slurp "meurt" s'il ne trouve pas le
fichier
$text =~ s/^O>===.*?$|^===.*?$|^------.*?$//mg; # cf. doc du modifier m
write_file($filename."out",\$text); # ecriture du fichier de sortie (on
        #peut egalement ecraser le fichier original, bien sur
---8<-----------8<---------8<-------
(puis appeler le script sur le fichier)
Cordialement,
HTH,
azra.
Bonjour tous et meilleurs voeux,
Je souhaiterais avoir une aide pour la suppressionn de ligne
J'ai un fichier .txt , envoy chaque semaine, qui contient des lignes
C>
O>====================================================================Essai
======================================================================ttest­1
test2
---------------------------------------------------------------------------­----
1300        101:1635
C>
O>====================================================================Essai­1
======================================================================ttest­1
test2
---------------------------------------------------------------------------­----
1600        101:1634
Je souhaiterais ne plus avoir dans le fichier de sortie
- les lignes commen ant par O>===
- les lignes commen ant par ===
- les lignes commen ant par -------
Quelqu'un peut il m'aider ?
Merci d'avance
Le Lauxeti- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Bonjour,
merci pour la réponse,
non , je pense me servir de perl pour traiter les données qui sont
dans ce fichier txt , dans l'exemple donné , j'ai precisé que les
lignes qui me posaient problèmes , je teste vos solutions
merci d'avance
Cordialement
Le lauxeti
Marc Espie
2012-01-11 13:48:02 UTC
Permalink
Post by azrazer
Bonjour,
voulez-vous utiliser perl pour cela ? (s'il n'y a que cette tâche à
faire, ce n'est peut-être pas le meilleur outil)
avec sed : sed -i '/^O>===\|^===\|^------/d' VOTREFICHIER.txt
---8<-----------8<---------8<-------
use strict;
use warnings;
use File::Slurp;
my $filename = shift;
my $text = read_file($filename); # Slurp "meurt" s'il ne trouve pas le
fichier
$text =~ s/^O>===.*?$|^===.*?$|^------.*?$//mg; # cf. doc du modifier m
write_file($filename."out",\$text); # ecriture du fichier de sortie (on
#peut egalement ecraser le fichier original, bien sur
Mais lol quoi. Apprendre a utiliser perl.

perl -ni.bak -e 'print unless m/^(0\>)?\=\=\=/ or m/^\-{5}/' fichier.txt

(sinon, sed -i n'est pas standard, ca ne marchera qu'avec gnu-sed).
azrazer
2012-01-11 14:21:54 UTC
Permalink
Post by Marc Espie
Mais lol quoi. Apprendre a utiliser perl.
Si on veut faire de la ligne de commande : il y a des outils plus légers
que perl pour faire ce genre de remplacements
(sed, awk, grep, etc...)

le seul avantage de perl, ici (à mon avis) est de l'utiliser si on veut
vraiment faire un script plus complexe que simplement supprimer des lignes.
Post by Marc Espie
perl -ni.bak -e 'print unless m/^(0\>)?\=\=\=/ or m/^\-{5}/' fichier.txt
"mais lol quoi", pourquoi echappez-vous les signes "=" ... et "-" ??
et si la repetition ----- vous fait bondir, pourquoi pas celle \=\=\= ?

=> il est plus simple pour expliquer aux gens qui ne sont pas a l'aise
avec les regexp des expressions simples que des expressions
"factorisées", mais bon cela semble vous échapper...
Post by Marc Espie
(sinon, sed -i n'est pas standard, ca ne marchera qu'avec gnu-sed).
oui désolé, utiliser
sed -e '/^O>===\|^===\|^------/d' VOTREFICHIER.txt > VOTREFICHIEROUT.txt

Il y a moults façons de faire, pas de quoi "loler" outre mesure...

azra.
Marc Espie
2012-01-11 15:49:32 UTC
Permalink
Post by azrazer
Post by Marc Espie
Mais lol quoi. Apprendre a utiliser perl.
Si on veut faire de la ligne de commande : il y a des outils plus légers
que perl pour faire ce genre de remplacements
(sed, awk, grep, etc...)
On est quand meme dans fr.comp.lang.perl
Post by azrazer
le seul avantage de perl, ici (à mon avis) est de l'utiliser si on veut
vraiment faire un script plus complexe que simplement supprimer des lignes.
Le 2e avantage de perl ici, a mon avis, est la syntaxe particulierement
agreable et reguliere des expressions regulieres, chose que ni awk, ni sed,
ni grep ne partagent.
Post by azrazer
Post by Marc Espie
perl -ni.bak -e 'print unless m/^(0\>)?\=\=\=/ or m/^\-{5}/' fichier.txt
"mais lol quoi", pourquoi echappez-vous les signes "=" ... et "-" ??
et si la repetition ----- vous fait bondir, pourquoi pas celle \=\=\= ?
Parce que ca fait partie des bonnes pratiques et de la regularite de perl:
on peut mettre des \ devant tous les caracteres susceptibles d'etre speciaux,
a comparer avec les regles un peu biscornues, de par exemple, grep et des
parentheses.
Post by azrazer
=> il est plus simple pour expliquer aux gens qui ne sont pas a l'aise
avec les regexp des expressions simples que des expressions
"factorisées", mais bon cela semble vous échapper...
Boarf, c'etait un exemple. On peut faire comme ca, ca titille pour apprendre
des trucs en plus a mon avis.
Post by azrazer
Post by Marc Espie
(sinon, sed -i n'est pas standard, ca ne marchera qu'avec gnu-sed).
oui désolé, utiliser
sed -e '/^O>===\|^===\|^------/d' VOTREFICHIER.txt > VOTREFICHIEROUT.txt
Il y a moults façons de faire, pas de quoi "loler" outre mesure...
C'etait juste la longueur comparee du script perl avec le sed, qui denote
clairement plus d'habitude de sed, alors qu'on peut faire aussi long avec perl.

Apres si tu te vexes... desole ;-)
azrazer
2012-01-11 16:43:47 UTC
Permalink
Post by Marc Espie
Post by Marc Espie
Mais lol quoi. Apprendre a utiliser perl.
[...]
Post by Marc Espie
Le 2e avantage de perl ici, a mon avis, est la syntaxe particulierement
agreable et reguliere des expressions regulieres, chose que ni awk, ni sed,
ni grep ne partagent.
+1 :)
[...]
Post by Marc Espie
C'etait juste la longueur comparee du script perl avec le sed, qui denote
clairement plus d'habitude de sed, alors qu'on peut faire aussi long avec perl.
(bof, c'est juste que pour des traitements comme celui-là je trouve que
perl est un peu une massue
pour écraser un asticot, mais bon... la simplicité (et du coup la clarté
qui en resulte) des regex
est un bon argument pour l'utiliser :), je plussoie !)
Post by Marc Espie
Apres si tu te vexes... desole ;-)
Désolé, la premiere ligne faisait un peu condescendante... mais bon...
sans rancune.

Bref problème résolu, c'est l'essentiel.

azra.
Pioche Encore
2012-01-19 10:30:56 UTC
Permalink
Post by Marc Espie
Apres si tu te vexes... desole ;-)
TMTOWTDI

Loading...