web-dev-qa-db-fra.com

Supprimer certaines lignes d'un fichier texte via un fichier de commandes

J'ai un fichier txt généré. Ce fichier contient certaines lignes qui sont superflues et doivent être supprimées. Chaque ligne à supprimer est l’une des deux chaînes de la ligne; "ERREUR" ou "REFERENCE". 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:

 Bonne ligne de données 
 Mauvaise ligne de C:\Répertoire\ERROR\myFile.dll 
 Une autre bonne ligne de données 
 Mauvaise ligne: REFERENCE 
Bonne ligne

Je voudrais que le fichier se termine comme ceci:

 Bonne ligne de données 
 Une autre bonne ligne de données 
 Bonne ligne 

TIA.

66
chrome

Utilisez le suivant:

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 rechercher et installer sed/awk/Perl, etc.

Voir la transcription suivante pour son fonctionnement:

 C: \> type fichier.txt 
 Bonne ligne de données 
 Mauvaise ligne de C:\Répertoire\ERROR\myFile.dll 
 Une autre bonne ligne de données 
 mauvaise ligne: REFERENCE 
 Bonne ligne 
 
 C: \> type file.txt | findstr/v ERROR | findstr/v REFERENCE 
 Bonne ligne de données 
 Une autre bonne ligne de données 
 Bonne ligne 
98
paxdiablo

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

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

Détails de comment cela fonctionne:

  • / v trouve les lignes qui ne correspondent pas à la chaîne de recherche (même commutateur que @paxdiablo utilise)
  • si la chaîne de recherche est entre guillemets, il 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 le nourrir avec la commande "type"
  • "> outfile.txt" enverra les résultats dans le fichier outfile.txt au lieu de les imprimer sur votre console. (Notez qu'il écrasera le fichier s'il existe. Utilisez ">> outfile.txt" si vous souhaitez l'ajouter.)
  • Vous pouvez également envisager d’ajouter le commutateur/i pour effectuer une correspondance sans distinction de casse.
39
Rick

Si vous avez sed:

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

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

5
Rob

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

1
mirod