こんばんは。
$txt
の中身が行ごとのstring[]
配列なのか、改行込みの単一のstring
型なのかによって答えが変わります。
例えば以下の様な簡単なテキストファイル(sample.txt
)があったとして、
例1~2の様にファイルの読み方によって$txt
の内容が変わります。
(おそらく例1のほうだと思いますが)
powershell
1# 例1
2# $txt は行ごとの string[] 配列になる
3$txt = Get-Content .\sample.txt
4# $txt.Count => 2
5# $txt[0] => [a] = a
6# $txt[1] => [b] = b
powershell
1# 例2
2# $txt は改行込みの文字列が入った単一の string型になる
3$txt = Get-Content .\sample.txt -Raw
4# $txt => @"
5# [a] = a
6# [b] = b
7# "@
例1の場合
この場合、-replace
演算子は各要素(=行)毎に処理されるので、最初の[a] = a
が置換されてたとしても、どうしても空文字列が残ります。
このため-replace
だけではなく?(Where-Object)
等をつかって不要な要素を取り除くしかありません。
powershell
1# 実行例
2$txt -replace "^[a.*$",$null | ? { $_ -ne ""}
【ちょっと追記】
この場合は-replace
でなく?(Where-Object)
と-notmatch
を使ったほうがよりシンプルになりますね。
powershell
1# 実行例
2$txt | ? { $_ -notmatch "^[a.*$" }
例2の場合
この場合は単一の改行込みの文字列なので、置換パターンを以下の様にしてやれば上手くいくはずです。
powershell
1# 実行例
2$txt -replace "^[a.*\n",$null
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/27 07:57