92 votes

Supprimer certaines lignes d'un fichier txt via un fichier batch

J'ai un fichier txt généré. Ce fichier contient certaines lignes qui sont superflues et qui doivent être supprimées. Chaque ligne qui doit être supprimée comporte l'une des deux chaînes suivantes : "ERREUR" ou "RÉFÉRENCE". Ces jetons peuvent apparaître n'importe où dans la ligne. Je voudrais supprimer ces lignes, tout en conservant toutes les autres lignes.

Donc, si le fichier txt ressemble à ceci :

Good Line of data
bad line of C:\\Directory\\ERROR\\myFile.dll
Another good line of data
bad line: REFERENCE 
Good line

Je voudrais que le fichier se termine comme ceci :

Good Line of data
Another good line of data
Good line

TIA.

127voto

paxdiablo Points 341644

Utilisez les éléments suivants :

type file.txt | findstr /v ERROR | findstr /v REFERENCE

Cela présente l'avantage d'utiliser des outils standard dans le système d'exploitation Windows, plutôt que de devoir trouver et installer sed/awk/perl et autres.

Voir la transcription suivante pour le fonctionnement :

C:\\>type file.txt
Good Line of data
bad line of C:\\Directory\\ERROR\\myFile.dll
Another good line of data
bad line: REFERENCE
Good line

C:\\>type file.txt | findstr /v ERROR | findstr /v REFERENCE
Good Line of data
Another good line of data
Good line

1 votes

Super, juste la ligne que je cherchais.

6 votes

J'ai eu exactement le même problème et je l'ai trouvé ici sur SO. Que Dieu bénisse Stack Overflow !

28 votes

Pour être complet : vous devez ajouter "> output.txt" (sans guillemets) pour que la sortie soit écrite dans un fichier.

61voto

Rick Points 1582

Vous pouvez réaliser la même solution que celle de @paxdiablo en utilisant simplement findstr par lui-même. Il n'est pas nécessaire d'envoyer plusieurs commandes ensemble :

findstr /V "ERROR REFERENCE" infile.txt > outfile.txt

Détails du fonctionnement :

  • /v trouve les lignes qui ne correspondent pas à la chaîne de recherche (même commutateur utilisé par @paxdiablo)
  • si la chaîne de recherche est entre guillemets, elle effectue une recherche OR, en utilisant chaque mot (le séparateur est un espace)
  • findstr peut prendre un fichier d'entrée, vous n'avez pas besoin de lui fournir le texte en utilisant la commande "type".
  • "> outfile.txt" enverra les résultats dans le fichier outfile.txt au lieu de les imprimer sur votre console. (Notez que cela écrasera le fichier s'il existe. Utilisez plutôt ">> outfile.txt" si vous souhaitez l'annexer).
  • Vous pouvez également envisager d'ajouter le commutateur /i pour effectuer une correspondance insensible à la casse.

0 votes

Type !INSTALLED_APPS ! | findstr /v "@ //" > temp_filter_out_junk.txt >nul 2>&1

0 votes

J'ai essayé ceci type D:/e5/datastream/package.json | findstr /v eikon-framework | findstr /v df-core mais il ne supprime pas les lignes

0 votes

J'ai essayé findstr /V "eikon-framework df-core" D:\e5\datastream\package.json > D:\e5\datastream\package.json mais il supprime tout le contenu si j'essaie de remplacer les données dans le même fichier et si j'utilise un nom de fichier de sortie différent, cela fonctionne. Comment puis-je mettre à jour le même fichier ?

7voto

Rob Points 1278

Si vous avez sed :

sed -e '/REFERENCE/d' -e '/ERROR/d' [FILENAME]

FILENAME est le nom du fichier texte avec les bonnes et mauvaises lignes.

2 votes

N'avez-vous pas besoin de la -i drapeau ?

1voto

mirod Points 10845

Si vous avez installé perl, alors perl -i -n -e"print unless m{(ERROR|REFERENCE)}" devrait faire l'affaire.

0voto

Hary Dee Points 21

Il semble que l'utilisation du FIND au lieu de la FINDSTR peut également prendre en charge les caractères unicode. Par exemple type file.txt | find /v ""

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