次の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
、ファイル内で複数回繰り返され、上記のように最初の部分のみを一致させようとしています。あれは正しいですか?現在、出力として空になっています。
何か不足していますか?
エスケープ|バックティックを使用したキャラクター
get-content c:\new\temp_*.txt | select-string -pattern 'H`|159' -notmatch | Out-File c:\new\newfile.txt
同じファイルに書き込みたいと仮定すると、次のようにできます:
Set-Content -Path "C:\temp\Newtext.txt" -Value (get-content -Path "c:\Temp\Newtext.txt" | Select-String -Pattern 'H\|159' -NotMatch)
パイプ文字|
は、正規表現で特別な意味を持ちます。 a|b
は、「a
またはb
のいずれかに一致する」ことを意味します。リテラル|
文字と一致させたい場合は、エスケープする必要があります。
... | Select-String -Pattern 'H\|159' -NotMatch | ...