Использование PowerShell для удаления строк из текстового файла, если оно содержит строку

Я пытаюсь удалить все строки из текстового файла, который содержит частичную строку, используя следующий код PowerShell:

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

Фактическая строка H|159|28-05-2005|508|xxx, она повторяется в файле несколько раз, и я пытаюсь совместить только первую часть, как указано выше. Это верно? В настоящее время я получаю пустой вывод.

Я что-то пропустил?

Ответ 1

Побег | символ с использованием обратного хода

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

Ответ 2

Характер трубы | имеет особое значение в регулярных выражениях. a|b означает "соответствует либо a, либо b". Если вы хотите совместить буквенный символ |, вам нужно его избежать:

... | Select-String -Pattern 'H\|159' -NotMatch | ...

Ответ 3

Предположим, что вы хотите записать это в том же файле, вы можете сделать следующее:

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