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 ?

10voto

Oleg Mazko Points 66

7voto

GordyCA Points 21

Vous pouvez également supprimer une série de lignes dans un fichier. Par exemple, pour supprimer des procédures stockées dans un fichier SQL.

sed '/CREATE PROCEDURE.*/,/END ;/d' sqllines.sql

Cela supprimera toutes les lignes entre CREATE PROCEDURE et END ;.

J'ai nettoyé de nombreux fichiers sql avec cette commande sed.

6voto

Kjetil S. Points 1
perl -i    -nle'/regexp/||print' file1 file2 file3
perl -i.bk -nle'/regexp/||print' file1 file2 file3

La première commande édite le(s) fichier(s) en place (-i).

La deuxième commande fait la même chose mais conserve une copie ou une sauvegarde du ou des fichiers originaux en ajoutant .bk aux noms de fichiers (.bk peut être changé en n'importe quoi).

4voto

Shizzmo Points 4695

echo -e "/thing_to_delete\ndd\033:x\n" | vim file_to_edit.txt

4voto

peak Points 71

Curieusement, la réponse acceptée ne répond pas directement à la question. La question porte sur l'utilisation de sed pour remplacer un chaîne de caractères mais la réponse semble présupposer la connaissance de la manière de convertir une chaîne arbitraire en un fichier de type regex .

De nombreuses bibliothèques de langage de programmation disposent d'une fonction permettant d'effectuer une telle transformation, par ex.

python: re.escape(STRING)
ruby: Regexp.escape(STRING)
java:  Pattern.quote(STRING)

Mais comment le faire en ligne de commande ?

Comme il s'agit d'une question orientée sed, une approche serait d'utiliser sed lui-même :

sed 's/\([\[/({.*+^$?]\)/\\\1/g'

Ainsi, étant donné une chaîne arbitraire $STRING, nous pourrions écrire quelque chose comme :

re=$(sed 's/\([\[({.*+^$?]\)/\\\1/g' <<< "$STRING")
sed "/$re/d" FILE

ou en une seule phrase :

 sed "/$(sed 's/\([\[/({.*+^$?]\)/\\\1/g' <<< "$STRING")/d" 

avec des variations telles que décrites ailleurs sur cette page.

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