PS文件中的PowerShell中的sudstring删除和替换



i有.txt文件,该文件具有100个语句,如DLL和\ASABC_1CD的名称,在每行中更改

-MASSFile=x.dll,\ASABC_1CDsoftwareDDDx.dll

\ASABC_1CD不是恒定的,每天都在变化。dll名称是什么。

因此,在PowerShell脚本中,我想按名称x.dll搜索,该名称X.dll在每行两次中存在,然后用两个.dll名称之间的\ASABC_1CD替换CC_3

所以最终语句如下

-MASSFile=x.dll,....LXsoftwareDDDx.dll

您可以将-replace与Lookaround断言使用:

$line = '-MASSFile=x.dll,\ASABC_1CDsoftwareDDDx.dll'
$dllName = 'x.dll'
$newPath = '\serversharepathto'
$line -replace ('(?<=={0},).+(?=\{0}$)' -f [regex]::escape($dllName)), $newPath

上述产量:

-MASSFile=x.dll,\serversharepathtox.dll

为了对文件的所有行执行上述替换,并更新该文件,请将Get-ContentForEach-ObjectSet-Content相结合:

$fileToUpdate = 'file.txt'
$dllName = 'x.dll'
$newPath = '\serversharepathto'
(Get-Content $fileToUpdate) | ForEach-Object { 
  $_ -replace ('(?<=={0},).+(?=\{0}$)' -f [regex]::escape($dllName)), $newPath
} | Set-Content -Encoding Utf8 $fileToUpdate
  • 请注意,需要将Get-Content调用包含在(...)中以确保在Fult 中读取 unfront ,如果您想编写,这是必需的结果回到同一文件。

  • Set-Content带有明确的-Encoding值确保在输出上使用所需的字符编码;如果您满足于" Unicode"(UTF-16LE)编码,则可以使用> $fileToUpdate而不是Set-Content调用。

这是您需要的吗?

get-content $filepath | 
%{$_.Replace("\ASABC_1CD","....LX")}  |
Set-Content $filepath

如果您只想在名为 x.dll的文件上更改它,则可以将替换方法更改为:

$_.Replace("x.dll,\ASABC_1CD","x.dll,....LX")

尝试以下:

$yourfile="c:temptest.txt"
(get-content "$yourfile").Replace("x.dll,\ASABC_1CD","x.dll,....LX") | set-content $yourfile

最新更新