これまで powershell を使用したことがなく、Google は私が必要としている正確な答えをくれませんでした。皆さんが私を助けてくれることを願っています。次の 2 行のディレクトリ (サブディレクトリを含む) 内のすべてのファイルを検索する必要があります。
aaa aaa
bbb bbb
2行目を次のように置き換えますccc
bbb bbb
の直後に行が続かない場合、置換は行われませんaaa aaa
。
これが私がこれまでに持っているものです:
$line3 = "aaa[ ]*aaa[ ]*bbb[ ]*bbb"
Get-ChildItem -exclude *.bak -recurse *.txt | Where-Object {$_.Attributes -ne "Directory"} |
ForEach-Object {
Copy-Item $_ "$($_).bak";
$wholeFile = [IO.File]::ReadAllText("$_");
$wholeFile = $wholeFile.replace("`n", " ");
$wholeFile = $wholeFile.replace("`r", " ");
$temp3 = $wholeFile | Select-String -pattern $line3 -quiet;
if(($temp3 -eq "True")){
(Get-Content $_) -replace "bbb[ ]*bbb", "ccc" | Set-Content -path $_;
}
else{
echo failed
}
}
ファイルに「bbb bbb」が 2 回出現する場合を除いて、このコードはほとんど機能すると思います。両方の行が置き換えられ、最初の行だけを置き換える必要があります.それを修正する方法はありますか? 私が何かを見逃した場合、より経験豊富な人が教えてくれますか? 私が必要としているものに対して、より簡単で短い解決策はありますか? 私は、powershell で非常に多くのきちんとした 1 行のソリューションを見てきました。私の場合、そのようなことはありますか?ありがとう