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

问题描述 投票:1回答:1

我想首先找到存储在.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
        }
regex powershell
1个回答
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\ substring
  • .*? - 除了换行符之外的0个或更多个字符,尽可能少
  • (\.txt\2) - 第2组:.txt和第2组中捕获的文本。

替换是连接的结果:

  • ${1} - 第1组值(如果BBB实际上可能以数字开头,那么大括号是必须的)
  • $DName.replace('$','$$') - 带有加倍$字符的新文件名(因为这些在.NET替换模式中是特殊的)
  • $3 - 第3组价值。
© www.soinside.com 2019 - 2024. All rights reserved.