ps文件中的PowerShell中的子串删除和替换

时间:2017-09-05 05:53:15

标签: powershell

我有.TXT文件,其中有100个语句,其名称为DLL,\\AS\ABC_1\CD每行都有变化

-MASSFile=x.dll,\\AS\ABC_1\CD\software\DDD\x.dll

\\AS\ABC_1\CD不是常量并且每天都在变化。唯一的名称是。{/ p>

所以在powershell脚本中,我希望按名称x.dll进行搜索,每个行中存在两次,并在两个.Dll名称之间用\\AS\ABC_1\CD替换..\..\LX

所以最终陈述如下

-MASSFile=x.dll,..\..\LX\software\DDD\x.dll

3 个答案:

答案 0 :(得分:0)

这是你需要的吗?

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

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

$_.Replace("x.dll,\\AS\ABC_1\CD","x.dll,..\..\LX")

答案 1 :(得分:0)

试试这个:

$yourfile="c:\temp\test.txt"
(get-content "$yourfile").Replace("x.dll,\\AS\ABC_1\CD","x.dll,..\..\LX") | set-content $yourfile

答案 2 :(得分:0)

您可以将-replacelookaround assertions

一起使用
$line = '-MASSFile=x.dll,\\AS\ABC_1\CD\software\DDD\x.dll'
$dllName = 'x.dll'
$newPath = '\\server\share\path\to'

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

以上产量:

-MASSFile=x.dll,\\server\share\path\to\x.dll

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

$fileToUpdate = 'file.txt'
$dllName = 'x.dll'
$newPath = '\\server\share\path\to'

(Get-Content $fileToUpdate) | ForEach-Object { 
  $_ -replace ('(?<=={0},).+(?=\\{0}$)' -f [regex]::escape($dllName)), $newPath
} | Set-Content -Encoding Utf8 $fileToUpdate
  • 请注意,需要在Get-Content中附上(...)来电,以确保在完整,预先中读取,如果要将结果写回同一文件,则需要这样做。

  • 带有显式Set-Content值的
  • -Encoding可确保在输出中使用所需的字符编码;如果您对“Unicode”(UTF-16LE)编码感兴趣,则可以使用> $fileToUpdate代替Set-Content来电。