bonjour,
je cherche en une commande =E0 enlever d'un fichier texte des lignes
correspondant =E0 un masque.
Lorsque j'utilise la commande suivante :
cat nom_du_fichier |grep -v texte_a_enlever
j'obtient =E0 l'=E9cran le r=E9sultat voulu, mais lorsque j'ajoute :
cat nom_du_fichier |grep -v texte_a_enlever >nom_du_fichier
cel=E0 le vide
Qqun aurait-il la solution ?
merci d'avance
Si c'est celui de droite qui est créé en premier, la redirection vide le fichier avant que la commande de gauche ne soit lancée ;
Tout dépend de ce qu'on entend par créé. Il y a plusieurs stratégies possibles pour le shell. Par exemple :
- ouvrir le fichier en écriture avant de forker les deux process qui vont execer les deux membres du pipe. Dans ce cas, effectivement, le fichier se fait zoinxer à coup sur
- forker deux process A et B, et dans A ouvrir le fichier en écriture puis execer grep, et, dans B, execer cat. Là, peu importe l'ordre dans lequel A et B sont forkés, on n'a aucune garantie sur l'ordre dans lequel le exec cat et le open(fichier,O_WRONLY|O_TRUNC) vont être exécutés.
Stéphan Peccini :
Si c'est celui de droite qui est créé en premier, la redirection vide le
fichier avant que la commande de gauche ne soit lancée ;
Tout dépend de ce qu'on entend par créé. Il y a plusieurs stratégies
possibles pour le shell. Par exemple :
- ouvrir le fichier en écriture avant de forker les deux process qui vont
execer les deux membres du pipe. Dans ce cas, effectivement, le fichier se
fait zoinxer à coup sur
- forker deux process A et B, et dans A ouvrir le fichier en écriture puis
execer grep, et, dans B, execer cat. Là, peu importe l'ordre dans lequel A
et B sont forkés, on n'a aucune garantie sur l'ordre dans lequel le exec cat
et le open(fichier,O_WRONLY|O_TRUNC) vont être exécutés.
Si c'est celui de droite qui est créé en premier, la redirection vide le fichier avant que la commande de gauche ne soit lancée ;
Tout dépend de ce qu'on entend par créé. Il y a plusieurs stratégies possibles pour le shell. Par exemple :
- ouvrir le fichier en écriture avant de forker les deux process qui vont execer les deux membres du pipe. Dans ce cas, effectivement, le fichier se fait zoinxer à coup sur
- forker deux process A et B, et dans A ouvrir le fichier en écriture puis execer grep, et, dans B, execer cat. Là, peu importe l'ordre dans lequel A et B sont forkés, on n'a aucune garantie sur l'ordre dans lequel le exec cat et le open(fichier,O_WRONLY|O_TRUNC) vont être exécutés.
lhabert
Stéphan Peccini :
Peut on en tirer une conclusion ?
Non, puisque ce que je disais n'excluait absolument pas le comportement que tu décris.
Stéphan Peccini :
Peut on en tirer une conclusion ?
Non, puisque ce que je disais n'excluait absolument pas le comportement que
tu décris.
Non, puisque ce que je disais n'excluait absolument pas le comportement que tu décris.
Stéphan Peccini
Stéphan Peccini :
Si c'est celui de droite qui est créé en premier, la redirection vide le fichier avant que la commande de gauche ne soit lancée ;
Tout dépend de ce qu'on entend par créé. Il y a plusieurs stratégies possibles pour le shell. Par exemple :
- ouvrir le fichier en écriture avant de forker les deux process qui vont execer les deux membres du pipe. Dans ce cas, effectivement, le fichier se fait zoinxer à coup sur
C'est à cela à quoi je pensais ; le mot "créé" est inadapté ; c'est plutôt "évalué" l'expression de droite, enfin bref je ne trouve pas les bons mots. Car en plus, pour les processus, c'est l'inverse de ce que je dis que j'obtiens sur un autre exemple : [ Grenouille]$ sleep 100 | sleep 200 ... [ ~]$ ps -ef | grep sleep spc 13677 5003 0 17:44 pts/3 00:00:00 sleep 100 spc 13678 5003 0 17:44 pts/3 00:00:00 sleep 200 spc 13690 5006 0 17:44 pts/4 00:00:00 grep sleep [ ~]$
- forker deux process A et B, et dans A ouvrir le fichier en écriture puis execer grep, et, dans B, execer cat. Là, peu importe l'ordre dans lequel A et B sont forkés, on n'a aucune garantie sur l'ordre dans lequel le exec cat et le open(fichier,O_WRONLY|O_TRUNC) vont être exécutés.
A chaque fois que j'ai fait cette manipulation, (cat /tmp/toto | grep titi
/tmp/toto), j'ai toujours récupéré un fichier vide. Mais bon, ce ne doit pas être représentatif.
-- Stephan Peccini PhotoNature : <URL:http://www.photonature.fr>
Stéphan Peccini :
Si c'est celui de droite qui est créé en premier, la redirection vide le
fichier avant que la commande de gauche ne soit lancée ;
Tout dépend de ce qu'on entend par créé. Il y a plusieurs stratégies
possibles pour le shell. Par exemple :
- ouvrir le fichier en écriture avant de forker les deux process qui vont
execer les deux membres du pipe. Dans ce cas, effectivement, le fichier se
fait zoinxer à coup sur
C'est à cela à quoi je pensais ; le mot "créé" est inadapté ; c'est plutôt
"évalué" l'expression de droite, enfin bref je ne trouve pas les bons mots.
Car en plus, pour les processus, c'est l'inverse de ce que je dis que
j'obtiens sur un autre exemple :
[spc@tesenca Grenouille]$ sleep 100 | sleep 200
...
[spc@tesenca ~]$ ps -ef | grep sleep
spc 13677 5003 0 17:44 pts/3 00:00:00 sleep 100
spc 13678 5003 0 17:44 pts/3 00:00:00 sleep 200
spc 13690 5006 0 17:44 pts/4 00:00:00 grep sleep
[spc@tesenca ~]$
- forker deux process A et B, et dans A ouvrir le fichier en écriture puis
execer grep, et, dans B, execer cat. Là, peu importe l'ordre dans lequel A
et B sont forkés, on n'a aucune garantie sur l'ordre dans lequel le exec
cat et le open(fichier,O_WRONLY|O_TRUNC) vont être exécutés.
A chaque fois que j'ai fait cette manipulation, (cat /tmp/toto | grep titi
/tmp/toto), j'ai toujours récupéré un fichier vide. Mais bon, ce ne doit
pas être représentatif.
--
Stephan Peccini
PhotoNature : <URL:http://www.photonature.fr>
Si c'est celui de droite qui est créé en premier, la redirection vide le fichier avant que la commande de gauche ne soit lancée ;
Tout dépend de ce qu'on entend par créé. Il y a plusieurs stratégies possibles pour le shell. Par exemple :
- ouvrir le fichier en écriture avant de forker les deux process qui vont execer les deux membres du pipe. Dans ce cas, effectivement, le fichier se fait zoinxer à coup sur
C'est à cela à quoi je pensais ; le mot "créé" est inadapté ; c'est plutôt "évalué" l'expression de droite, enfin bref je ne trouve pas les bons mots. Car en plus, pour les processus, c'est l'inverse de ce que je dis que j'obtiens sur un autre exemple : [ Grenouille]$ sleep 100 | sleep 200 ... [ ~]$ ps -ef | grep sleep spc 13677 5003 0 17:44 pts/3 00:00:00 sleep 100 spc 13678 5003 0 17:44 pts/3 00:00:00 sleep 200 spc 13690 5006 0 17:44 pts/4 00:00:00 grep sleep [ ~]$
- forker deux process A et B, et dans A ouvrir le fichier en écriture puis execer grep, et, dans B, execer cat. Là, peu importe l'ordre dans lequel A et B sont forkés, on n'a aucune garantie sur l'ordre dans lequel le exec cat et le open(fichier,O_WRONLY|O_TRUNC) vont être exécutés.
A chaque fois que j'ai fait cette manipulation, (cat /tmp/toto | grep titi
/tmp/toto), j'ai toujours récupéré un fichier vide. Mais bon, ce ne doit pas être représentatif.
-- Stephan Peccini PhotoNature : <URL:http://www.photonature.fr>