SHELL-Commande sed ne supprime pas les lignes [Résolu/Fermé]

-
Bonjour,

En shell, le code suivant :

sed -n '/error/d' monfichier.txt

ne marche pas : les lignes contenant 'error' ne sont pas supprimées

Merci pour votre aide
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
21511
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3393
2
Merci
Salut,

Pour comprendre, bonne lecture ici

lami20j@debian-acer:~$ cat plop
aaaa
error
bbbb
error aaa
cccc error
dddd
lami20j@debian-acer:~$ sed -n '/error/d' plop
lami20j@debian-acer:~$ sed -e '/error/d' plop
aaaa
bbbb
dddd
lami20j@debian-acer:~$ cat plop
aaaa
error
bbbb
error aaa
cccc error
dddd
lami20j@debian-acer:~$ sed -e '/error/d' plop > plop.tmp
lami20j@debian-acer:~$ cat plop
aaaa
error
bbbb
error aaa
cccc error
dddd
lami20j@debian-acer:~$ cat plop.tmp 
aaaa
bbbb
dddd
lami20j@debian-acer:~$ sed -i.orig '/error/d' plop
lami20j@debian-acer:~$ cat plop
aaaa
bbbb
dddd
lami20j@debian-acer:~$ cat plop.orig
aaaa
error
bbbb
error aaa
cccc error
dddd

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 71129 internautes nous ont dit merci ce mois-ci

Merci pour toutes tes explications.
J'ai cru qu'on pouvait le faire sans passer par un fichier temporaire.
Merci bien ;)
lami20j
Messages postés
21511
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3393 -
Re,

J'ai cru qu'on pouvait le faire sans passer par un fichier temporaire.
Oui, on peut. C'était le dernier exemple avec l'option -i
Regarde attentivement ;-)
En fait le fichier original est sauvegardé avec l'extension .orig


lami20j@debian-acer:~$ sed -i.orig '/error/d' plop  
lami20j@debian-acer:~$ cat plop  
aaaa  
bbbb  
dddd  
lami20j@debian-acer:~$ cat plop.orig  
aaaa  
error  
bbbb  
error aaa  
cccc error  
dddd
Salut,

ça ne fonctionne pas de mon côté : l'option -i n'est pas reconnue (illegal option)...

Ca marche bien en faisant :

sed -e '/error/d' plop_temp.txt > plop.txt
rm plop_temp.txt
Messages postés
21511
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3393
1
Merci
Salut,

l'option -i n'est pas reconnue (illegal option)...

Tu es sur quel système?
Tu as quelle version de sed ?
Chez moi j'ai
lami20j@debian-acer:~$ sed --version  
GNU sed version 4.2.1



On peut le faire avec perl alors

lami20j@debian-acer:~$ cat plop  
aaaa  
error  
bbbb  
error aaa  
cccc error  
dddd  
lami20j@debian-acer:~$ perl -ni.orig -e 'print unless /error/' plop  
lami20j@debian-acer:~$ cat plop  
aaaa  
bbbb  
dddd  
lami20j@debian-acer:~$ cat plop.orig  
aaaa  
error  
bbbb  
error aaa  
cccc error  
dddd
Messages postés
21511
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3393
1
Merci
Re,

Ou avec une combinaison grep et echo

lami20j@debian-acer:~$ cat plop
aaaa
error
bbbb
error aaa
cccc error
dddd
lami20j@debian-acer:~$ var=$(grep -v error plop) && echo "$var" > plop
lami20j@debian-acer:~$ cat plop
aaaa
bbbb
dddd
0
Merci
la commande
sed --version
ne marche pas non plus... bizarre

Mais tes deux autres solutions (perl et grep+echo) marchent parfaitement, avec une préférence pour la dernière car je n'ai pas de fichier à supprimer ensuite.

Encore merci ;)
lami20j
Messages postés
21511
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3393 -
Re,

De rien ;-)

avec une préférence pour la dernière car je n'ai pas de fichier à supprimer ensuite.
Il suffit d'enlever .orig de la commande perl et il n'y aura plus de fichier à supprimer.
Toutefois, quand on n'est pas sur de résultat il faut penser faire une sauvegarde de fichier d'origine
A savoir que .orig est-une extension crée par moi, tu peux mettre n'importe quoi .bak, .old, .ancien, .blabla

Voici sans sauvegarde de fichier original (la dernière commande montre qu'il n'y a pas d'autres fichiers à part plop)

lami20j@debian-acer:~$ cat plop
aaaa
error
bbbb
error aaa
cccc error
dddd
lami20j@debian-acer:~$ perl -ni -e 'print unless /error/' plop 
lami20j@debian-acer:~$ cat plop
aaaa
bbbb
dddd
lami20j@debian-acer:~$ cat plop.orig
cat: plop.orig: No such file or directory
ajoute l'option -i