Comment utiliser sed pour supprimer toutes les lignes d'un fichier texte qui contiennent une chaîne spécifique ?
Réponses
Trop de publicités?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
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.
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
- Réponses précédentes
- Plus de réponses