web-dev-qa-db-fra.com

Utilisation de PowerShell pour supprimer des lignes d'un fichier texte s'il contient une chaîne

J'essaie de supprimer toutes les lignes d'un fichier texte qui contient une chaîne partielle à l'aide du code PowerShell ci-dessous:

 Get-Content C:\new\temp_*.txt | Select-String -pattern "H|159" -notmatch | Out-File C:\new\newfile.txt

La chaîne réelle est H|159|28-05-2005|508|xxx, il se répète plusieurs fois dans le fichier et j'essaie de ne faire correspondre que la première partie comme spécifié ci-dessus. Est-ce exact? Actuellement, je deviens vide en sortie.

Suis-je en train de manquer quelque chose?

22
user3759904

Échapper à la | personnage utilisant un backtick

get-content c:\new\temp_*.txt | select-string -pattern 'H`|159' -notmatch | Out-File c:\new\newfile.txt
19
Fourkeys

Supposons que vous souhaitiez écrire cela dans le même fichier, vous pouvez procéder comme suit:

Set-Content -Path "C:\temp\Newtext.txt" -Value (get-content -Path "c:\Temp\Newtext.txt" | Select-String -Pattern 'H\|159' -NotMatch)
15
Samselvaprabu

Le caractère pipe | a une signification particulière dans les expressions régulières. a|b signifie "correspondre à a ou b". Si vous souhaitez faire correspondre un littéral | caractère, vous devez y échapper:

... | Select-String -Pattern 'H\|159' -NotMatch | ...
2
Ansgar Wiechers