Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

grep

16 réponses
Avatar
math140
Bonjour,

Les lignes de mon fichier sont structurées comme suit:
1 122.122.122.122 et etc
Je voudrais savoir comment je pourrait retiré le 122.122.122.122 de la ligne avec grep.

10 réponses

1 2
Avatar
Jo Engo
Bonjour, mardi 29 mars 2011 à 12:18:19, dans le(s) forum(s)
fr.comp.os.linux.configuration, math140 a proposé :

Bonjour,

Les lignes de mon fichier sont structurées comme suit:
1 122.122.122.122 et etc
Je voudrais savoir comment je pourrait retiré le 122.122.122.122 de
la ligne avec grep.



grep va te servir à trouver le motif. Pour le supprimmer, il faut que
tu utilise une autre commande

sed -e "s/<motif>//" <fichier>fichier.propre te crée un fichier propre
fichier.propre sans *la première occurence* de <motif> dans chaque
ligne.

Si tu as un fichier organisé en champs
<champ1> <champ2> <champ3> ...
et que tu veux obtenir un fichier avec
<champ1> <champ3> ...

Tu peux faire :
cat fichier|while read ligne do set ligne; echo -n $1; shift ; shift ;
echo $@; done >fichier.propre
(il y a d'autres possibilités)

Si tu veux un fichier qui contiennent toutes les lignes *qui ne
contiennent pas* <motif> c'est bien grep :

grep -v <motif> fichier

--
http://www.bidart.net/anniversaire
Avatar
Hugolino
Le 10-04-2011, Jo Engo a écrit :
Bonjour, mardi 29 mars 2011 à 12:18:19, dans le(s) forum(s)
fr.comp.os.linux.configuration, math140 a proposé :

> Bonjour,
>
> Les lignes de mon fichier sont structurées comme suit:
> 1 122.122.122.122 et etc
> Je voudrais savoir comment je pourrait retiré le 122.122.122.122 de
> la ligne avec grep.

grep va te servir à trouver le motif. Pour le supprimmer, il faut que
tu utilise une autre commande



Il suffit de redigirer la sortie de "grep -v motif" vers un nouveau
fichier.

sed -e "s/<motif>//" <fichier>fichier.propre te crée un fichier propre
fichier.propre sans *la première occurence* de <motif> dans chaque
ligne.



sed -e "s/<motif//g" pour supprimer toutes les occurences.

Si tu as un fichier organisé en champs
<champ1> <champ2> <champ3> ...
et que tu veux obtenir un fichier avec
<champ1> <champ3> ...

Tu peux faire :
cat fichier|while read ligne do set ligne; echo -n $1; shift ; shift ;
echo $@; done >fichier.propre



UUOC !!

(il y a d'autres possibilités)



Oui.

grep -v "motif" fichier-lu > fichier-sortie

Si tu veux un fichier qui contiennent toutes les lignes *qui ne
contiennent pas* <motif> c'est bien grep :

grep -v <motif> fichier



Bin voilà ;-)


--
Quelqu'un ici a dit qu'il y avait une patch pour fider les bugs de RedHat5
sur leur page ( www.redhat.com ) mais j'ai ps trouver ou qqun pourrias me
shooter l'adresse svp?
-+- Psionic in Guide du Linuxien pervers, "Tous drogués !!" -+-
Avatar
Netsurfeur
Bonjour,

Le 10/04/2011 11:18, Jo Engo a écrit :
Bonjour, mardi 29 mars 2011 à 12:18:19, dans le(s) forum(s)
fr.comp.os.linux.configuration, math140 a proposé :

Bonjour,

Les lignes de mon fichier sont structurées comme suit:
1 122.122.122.122 et etc
Je voudrais savoir comment je pourrait retiré le 122.122.122.122 de
la ligne avec grep.



grep va te servir à trouver le motif. Pour le supprimmer, il faut que
tu utilise une autre commande

sed -e "s/<motif>//"<fichier>fichier.propre te crée un fichier propre
fichier.propre sans *la première occurence* de<motif> dans chaque
ligne.

Si tu as un fichier organisé en champs
<champ1> <champ2> <champ3> ...
et que tu veux obtenir un fichier avec
<champ1> <champ3> ...

Tu peux faire :
cat fichier|while read ligne do set ligne; echo -n $1; shift ; shift ;
echo $@; done>fichier.propre
(il y a d'autres possibilités)




Je ne commenterai pas les autres propositions.
Par contre, pour supprimer un champ dans un fichier, il y a plus simple:
cut -f1,3- < fichier > fichier.propre


Si tu veux un fichier qui contiennent toutes les lignes *qui ne
contiennent pas*<motif> c'est bien grep :

grep -v<motif> fichier




--
Netsurfeur
Avatar
Hugolino
Le 11-04-2011, Netsurfeur a écrit :
Le 10/04/2011 11:18, Jo Engo a écrit :
>
> Tu peux faire :
> cat fichier|while read ligne do set ligne; echo -n $1; shift ; shift ;
> echo $@; done>fichier.propre
> (il y a d'autres possibilités)

Je ne commenterai pas les autres propositions.
Par contre, pour supprimer un champ dans un fichier, il y a plus simple:
cut -f1,3- < fichier > fichier.propre



Je me demande si ce one-liner n'appelle pas cut autant de fois qu'il y a
de lignes dans le fichier alors que grep -v "motif" fichier-lu > ficher-sortie
est sans doute beaucoup plus économe en temps machine...

12:32:24 /var/log/apache2 $ time grep -v "Apr" error.log > ~/error-grep.log
real 0m0.012s
user 0m0.008s
sys 0m0.004s
12:32:38 /var/log/apache2 $ time cut -d " " -f1,3- < error.log > ~/error-cut.log
real 0m0.084s
user 0m0.044s
sys 0m0.040s
(temps miminum obtenus après avoir répété 4 fois la commande)

Mais peut-être pas pour la raison que j'avance...
Un avis de spécialiste ?

[xp fcou ; fu2 fcolc ]

--
Des astronautes ont rencontré Dieu... et Elle est noire.
Hugo (né il y a 1 481 973 032 secondes)
Avatar
Nicolas George
Hugolino , dans le message
, a écrit :
(temps miminum obtenus après avoir répété 4 fois la commande)



Des temps aussi courts ne sont pas significatifs. Concatène ton fichier
error.log une centaine de fois avec lui-même, tu commenceras à avoir quelque
chose.
Avatar
Netsurfeur
Le 11/04/2011 12:39, Hugolino a écrit :
Le 11-04-2011, Netsurfeur a écrit :
Le 10/04/2011 11:18, Jo Engo a écrit :

Tu peux faire :
cat fichier|while read ligne do set ligne; echo -n $1; shift ; shift ;
echo $@; done>fichier.propre
(il y a d'autres possibilités)



Je ne commenterai pas les autres propositions.
Par contre, pour supprimer un champ dans un fichier, il y a plus simple:
cut -f1,3-< fichier> fichier.propre



Je me demande si ce one-liner n'appelle pas cut autant de fois qu'il y a
de lignes dans le fichier alors que grep -v "motif" fichier-lu> ficher-sortie
est sans doute beaucoup plus économe en temps machine...




Je ne vois pas comment une commande cut appelée une seule fois pourrait
être répétée pour chaque ligne du fichier d'entrée.

Quel est l'intérêt de comparer cut et grep ?
L'un supprime des colonnes, l'autre des lignes.

12:32:24 /var/log/apache2 $ time grep -v "Apr" error.log> ~/error-grep.log
real 0m0.012s
user 0m0.008s
sys 0m0.004s
12:32:38 /var/log/apache2 $ time cut -d " " -f1,3-< error.log> ~/error-cut.log
real 0m0.084s
user 0m0.044s
sys 0m0.040s
(temps miminum obtenus après avoir répété 4 fois la commande)

Mais peut-être pas pour la raison que j'avance...
Un avis de spécialiste ?

[xp fcou ; fu2 fcolc ]



--
Netsurfeur
Avatar
Hugolino
Le 11-04-2011, Nicolas George <nicolas$ a écrit :
Hugolino , dans le message
, a écrit :
> (temps miminum obtenus après avoir répété 4 fois la commande)

Des temps aussi courts ne sont pas significatifs. Concatène ton
fichier error.log une centaine de fois avec lui-même, tu commenceras
à avoir quelque chose.



J'aurais dû y penser...

13:47:21 ~ $ wc big-access.log
2726660 41294250 492782540 big-access.log

13:49:04 ~ $ time grep -v "Apr" big-access.log > ~/big-access-grep.log
real 0m1.016s
user 0m0.668s
sys 0m0.288s
13:50:53 ~ $ time cut -d " " -f1,3- < big-access.log > ~/big-access-cut.log
real 0m23.343s
user 0m4.616s
sys 0m6.220s
(temps miminum obtenus après avoir répété 4 fois la commande)

> Je me demande si ce one-liner n'appelle pas cut autant de fois qu'il y a
> de lignes dans le fichier alors que grep -v "motif" fichier-lu > ficher-sortie
> est sans doute beaucoup plus économe en temps machine...
> Mais peut-être pas pour la raison que j'avance...
> Un avis de spécialiste ?



Les conclusions sont sans appel en faveur de grep, mais le test avec cut
est tellement long qu'avec un 'top', on voit bien que cut n'est pas
lancé plusieurs fois, c'est donc sans doute qu'il lui faut 20 fois plus
de temps pour parcourir les deux millions et quelques lignes du fichier.

--
A mathematical formula should never be "owned" by anybody !
Mathematics belong to God.
-+- Digital Typography, Donald E. Knuth -+-
Hugo (né il y a 1 481 979 135 secondes)
Avatar
Hugues
Ce cher Netsurfeur a posté :


Je ne commenterai pas les autres propositions.
Par contre, pour supprimer un champ dans un fichier, il y a plus simple:
cut -f1,3- < fichier > fichier.propre



Je plussoie abondamment.
grep n'a rien à voir avec le problème énoncé.

--
Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Avatar
Hugolino
Le 11-04-2011, Netsurfeur a écrit :
Le 11/04/2011 12:39, Hugolino a écrit :
> Le 11-04-2011, Netsurfeur a écrit :
>>
>> Je ne commenterai pas les autres propositions. Par contre, pour
>> supprimer un champ dans un fichier, il y a plus simple: cut
>> -f1,3-< fichier> fichier.propre
>
> Je me demande si ce one-liner n'appelle pas cut autant de fois qu'il
> y a de lignes dans le fichier alors que grep -v "motif" fichier-lu > ficher-sortie
> est sans doute beaucoup plus économe en temps machine...

Je ne vois pas comment une commande cut appelée une seule fois pourrait
être répétée pour chaque ligne du fichier d'entrée.



Moi non plus, mais je craignais modestement que cela soit plutôt dû à
une cécité de ma part.

Quel est l'intérêt de comparer cut et grep ?
L'un supprime des colonnes, l'autre des lignes.



L'intérêt est de donner une commande 20 fois plus rapide à l'auteur
original du fil.


--
le curseur et indéfiniment déporté vers la droite sans même
que je ne bouge la souris,


T'aurais pas un bureau en pente ? :-)))
Hugo (né il y a 1 481 979 166 secondes)
Avatar
Hugues
Ce cher Hugolino a posté :

Quel est l'intérêt de comparer cut et grep ?
L'un supprime des colonnes, l'autre des lignes.



L'intérêt est de donner une commande 20 fois plus rapide à l'auteur
original du fil.



Surtout pour une commande qui ne fait *PAS* le boulot demandé..
Autant lui dire tout de suite :

$ : > /dev/null

ça va vachement plus vite...

--
Hugues Hiegel [http://www.hiegel.fr/~hugues/]

...et ça sert à rien.
1 2