web-dev-qa-db-ja.com

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、ファイル内で複数回繰り返され、上記のように最初の部分のみを一致させようとしています。あれは正しいですか?現在、出力として空になっています。

何か不足していますか?

22
user3759904

エスケープ|バックティックを使用したキャラクター

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

同じファイルに書き込みたいと仮定すると、次のようにできます:

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

パイプ文字|は、正規表現で特別な意味を持ちます。 a|bは、「aまたはbのいずれかに一致する」ことを意味します。リテラル|文字と一致させたい場合は、エスケープする必要があります。

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