2355 votes

Comment supprimer d'un fichier texte, toutes les lignes qui contiennent une chaîne spécifique ?

Comment utiliser sed pour supprimer toutes les lignes d'un fichier texte qui contiennent une chaîne spécifique ?

3voto

FatihSarigol Points 139

Au cas où quelqu'un voudrait le faire pour des correspondances exactes de chaînes de caractères, vous pouvez utiliser la fonction -w dans grep - w pour whole. C'est-à-dire, par exemple, si vous voulez supprimer les lignes qui ont le numéro 11, mais garder les lignes avec le numéro 111 :

-bash-4.1$ head file
1
11
111

-bash-4.1$ grep -v "11" file
1

-bash-4.1$ grep -w -v "11" file
1
111

Il fonctionne également avec le -f si vous souhaitez exclure plusieurs modèles exacts à la fois. Si "liste noire" est un fichier avec plusieurs motifs sur chaque ligne que vous voulez supprimer de "fichier" :

grep -w -v -f blacklist file

3voto

nassim Points 308

Pour afficher le texte traité dans la console

cat filename | sed '/text to remove/d' 

pour enregistrer le texte traité dans un fichier

cat filename | sed '/text to remove/d' > newfile

pour ajouter le texte traité à un fichier existant

cat filename | sed '/text to remove/d' >> newfile

pour traiter un texte déjà traité, dans ce cas supprimer plus de lignes de ce qui a été supprimé

cat filename | sed '/text to remove/d' | sed '/remove this too/d' | more

le site | more affichera le texte par morceaux d'une page à la fois.

2voto

Andrey Izman Points 796
cat filename | grep -v "pattern" > filename.1
mv filename.1 filename

1voto

Shawn Points 13289

Vous pouvez utiliser le bon vieux ed pour modifier un fichier de manière similaire à la réponse qui utilise ex . La grande différence dans ce cas est que ed prend ses commandes via l'entrée standard, et non pas comme des arguments de ligne de commande comme ex peut. Lorsque vous l'utilisez dans un script, la manière habituelle de s'adapter à cela est d'utiliser printf pour lui envoyer des commandes :

printf "%s\n" "g/pattern/d" w | ed -s filename

ou avec un hérédoc :

ed -s filename <<EOF
g/pattern/d
w
EOF

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X