J'ai donc plusieurs gros fichiers texte que je dois trier et supprimer toutes les occurrences de lignes qui contiennent un mot-clé donné. Donc, fondamentalement, si j'ai ces lignes:
Ce n'est pas un test
C'est un test
Peut-être un test
Certainement pas un test
Et je lance le script avec «non», je dois supprimer entièrement les lignes 1 et 4.
J'ai essayé avec:
PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") |
Foreach-Object {$_ -replace "3*Program*", ""} |
Set-Content "D:\Logs\co2.txt"
mais il ne remplace que le «programme» et non la ligne entière.
windows-7
powershell
script
Karel
la source
la source
Set-Content
? Je ne pense pas que ceSet-Content
soit un remplacement sans rendez-vousOut-File
.Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt
Out-File est essentiellement Set-Content, mais il exécute l'entrée via le formatage par défaut au lieu d'une simple conversion de chaîne.Cela fonctionnera:
la source
Vous pouvez également utiliser 'Select-String' avec l'option -notmatch:
la source
J'avais juste besoin de faire fonctionner cela et j'ai trouvé ce qui suit:
L'essentiel étant que le "Where-Object" utilisant un bloc de script (comme indiqué par les accolades) nécessite de déclarer la variable dans un événement de création de bloc de script, d'où la
ligne.
En le structurant de cette manière, on peut créer une fonction, lui passer une chaîne de texte pour qu'elle corresponde partiellement, effectuer la création du bloc de script avec la valeur transmise et la faire fonctionner correctement.
Les réponses ci-dessus n'expliquent pas correctement comment passer la valeur à remplacer dans une variable.
la source