通过正则表达式替换文件内容

时间:2019-03-04 04:37:20

标签: regex powershell

我想首先找到存储在.ps1文件中的文件名(例如XXX.txt)(可以是任何东西,BBB只是一个例子),如果找到,请用在控制台中输入的值替换它。那么我将使用诸如test.txt而不是xxx.txt

的新版本进行更新
$DName = read-host -prompt "Please Enter File Name"

(Get-Content "C:\run.ps1") | 
Foreach-Object { $content = $_ -replace "$????","$DName" } | 
Set-Content "C:\run.ps1"

run.ps1文件:

$line = ''
Get-Content C:\bulk\XXX.txt | 
    Select-String -Pattern 'TEMP' |
        ForEach-Object {
        #blah blah
        }

1 个答案:

答案 0 :(得分:1)

您可以使用

$_ -replace "(Get-Content\s+(['`"]?)C:\\bulk\\).*?(\.txt\2)", ('${1}' + $DName.replace('$','$$') + '$3')

请参见regex demo

详细信息

  • (Get-Content\s+(['`"]?)C:\\bulk\\)-第1组:
    • Get-Content\s+-Get-Content,然后是1+空格
    • (.*?)-第2组:一个'"或空字符串
    • C:\\bulk\\-C:\bulk\子字符串
  • .*?-除换行符以外的0个或更多字符,并且尽可能少
  • (\.txt\2)-第2组:.txt和第2组中捕获的文本。

替换是串联的结果:

  • ${1}-第1组值(如果BBB实际上可能以数字开头,则必须使用大括号)
  • $DName.replace('$','$$')-新文件名加了$个字符的两倍(因为它们在.NET替换模式中是特殊的)
  • $3-第3组值。