Bonjour ,
Je souhaite supprimer des lignes qui commencent toutes par une même série dont je ne connais pas la longueur dans un fichier.
Ex de fichier où je veux par exemple supprimer les lignes 000123:
0001234893459847594387534985
000124345873498732498723492
000123DFGK343908234098
000124ER3247349873498732948734989
Il faut faire un truc du genre:
cat file1 | sed "/s/000123???????????" >> file2
Quelqu'un à une idée ?
Merci d'avance
# grep ?
Posté par Pascal Terjan (site web personnel) . Évalué à 6.
[^] # Re: grep ?
Posté par cops91 . Évalué à 0.
Ex bis
000123DFDFSS
000124DFKJFDGJKFGLKJ
000125DSFLKJDFLKJSDFLKSD
000125FDKLJDFSKJ
000123SDLKJDLKDF
000123SDLKJSDFLKJDF
000100438743587239832798734
000124ZEIUERIUZERIUEZMRZE
J'ai peut-être une quinzaine de type de ligne differente et c'est par exemple que les 000123 que je veux supprimer
C'est effectivement plus claire expliqué comme ça ?
[^] # Re: grep ?
Posté par gastounet . Évalué à 2.
[^] # Re: grep ?
Posté par gastounet . Évalué à 2.
000123DFDFSS
000124DFKJFDGJKFGLKJ
000125DSFLKJDFLKJSDFLKSD
000125FDKLJDFSKJ
000123SDLKJDLKDF
000123SDLKJSDFLKJDF
000100438743587239832798734
000124ZEIUERIUZERIUEZMRZE
$ grep -v '^000123' fictmp
000124DFKJFDGJKFGLKJ
000125DSFLKJDFLKJSDFLKSD
000125FDKLJDFSKJ
000100438743587239832798734
000124ZEIUERIUZERIUEZMRZE
$
c'est pas ça que tu veux ?
[^] # Re: grep ?
Posté par cops91 . Évalué à -4.
si je fais un
grep ^000123 file1
ca va me donner n truc du genre:
000123..................
000123..................
000123..................
000123..................
000123..................
moi je veux avoir toutes les lignes sauf les 000123
je ne pense pas que grep puisse le faire où alors c'est du genre
cat file1 | grep ^000124 && grep ^000100 && ...... Et je suis pas sûr que ça marche
[^] # Re: grep ?
Posté par Pascal Terjan (site web personnel) . Évalué à 6.
Cette option lui dit de sélectionner les lignes qui ne correspondent pas au lieu de celles qui correspondent :-)
[^] # Re: grep ?
Posté par kolter (site web personnel, Mastodon) . Évalué à 2.
t'as essayé :
et si ça marche :
M.
[^] # Re: grep ?
Posté par cops91 . Évalué à 3.
C'est au poil ton truc Merci pascal & kolter
Désolé d'avoir douté
Bonne soirée
pb résolu
[^] # Re: grep ?
Posté par gastounet . Évalué à 1.
[^] # Re: grep ?
Posté par Nico . Évalué à 1.
[^] # Re: grep ?
Posté par jigso . Évalué à 2.
est suffisant.
# Et en sed...
Posté par tgl . Évalué à 4.
# sed '/^000123/d' file1 > file2
(c'est à dire que tu sélectionnes les ligne commençant par 000123, et tu leurs appliques la commande de suppression, "d")[^] # Re: Et en sed...
Posté par cops91 . Évalué à 1.
Je suis pas trop doué, en shell :-)))))
Par ailleur ça aurrait marché le : cat file1 | grep 000124 && grep 000100 ??
(Pas de unix sous la main ce soir pour tester)
[^] # Re: Et en sed...
Posté par kolter (site web personnel, Mastodon) . Évalué à 3.
M.
[^] # Re: Et en sed...
Posté par jerome (site web personnel) . Évalué à 7.
Mais arrêtez de faire des "cat file | grep blabla" !
grep ça peut lire sur stdin mais pitié, ça peut aussi lire dans un fichier avec "grep blabla file" !
[^] # Re: Et en sed...
Posté par tgl . Évalué à 4.
Et quand bien même ça ne pourrait pas, le "<" est fait juste pour ça...
[^] # Re: Et en sed...
Posté par gaaaaaAab . Évalué à 3.
mais que fait donc cette ligne me diras-tu ?
alors, bon:
&& est un opérateur séparant deux commandes. Ca fonctionne comme ça:
Si la première commande réussit, le shell lance la seconde, sinon, il la lance pas. Il n'y a donc aucun échange de donnée entre "cat file1 | grep 000124" et "grep 000100"
en reprenant la commande en "pas à pas", ça donne:
le shell lance cat sur le fichier et redirige la sortie standard de cat vers grep qui fait son sale boulot. Donc, quand on arrive au &&, il n'y a déjà plus que les lignes avec 000124 du fichier de départ.
Ensuite, ça dépend de ce que contenait ton fichier.
Si 000124 est effectivement présent dans ton fichier, le grep réussit, et le shell lance la commande grep 000100. Comme il n'y a pas de donnée en entrée pour grep dans cette seconde commande, grep se met en attente sur l'entrée standard.
Si 000124 n'est pas présent dans ton fichier, le premier grep renvoie 1, donc le shell ne lance pas la seconde commande et c'est fini.
par contre, on peut utiliser "ou" dans les expressions régulières
un truc comme
$ cat file1 | grep '000124\|000100'
ça aurait marché.
aussi, je me rend compte que ça a pas été explicitement dit dans les réponses, mais tu peux te dispenser du cat
$ grep '000124\|000100' file
donne le même résultat, tout en économisant un appel à cat.
bon, je fais en partie doublon avec la réponse de kolter, mais le commentaire de texte, ça prend du temps ;-)
juste oui, on peut rajouter les débuts de ligne (^) dans la regex
[^] # Re: Et en sed...
Posté par gaaaaaAab . Évalué à 3.
attention: > écrase le fichier alors que >> ajoute à la fin
[^] # Re: Et en sed...
Posté par tgl . Évalué à 4.
> $ grep '000124\|000100' file
Ce qui me rappelle une discussion récente ici même :
http://linuxfr.org/comments/516200.html#516200(...)
[^] # Re: Et en sed...
Posté par gaaaaaAab . Évalué à 2.
[^] # Re: Et en sed...
Posté par gaaaaaAab . Évalué à 2.
# Merci
Posté par cops91 . Évalué à 0.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.