powershell 替换值左侧和引号字符右侧的字符串

bnl4lu3b  于 2022-12-23  发布在  Shell
关注(0)|答案(1)|浏览(127)

我有一个文本文件content.txt

Some other text 1
"one" : "Text To Replace1:/Text To Stay.133" 
Some other text 2
"five" : "Text To Change2:/Another Text To Stay.50" 
Some other text 5

我想出了以下脚本:

$SRCFile = "K:\content.txt"
$DSTFile = "K:\result.txt"
$Text2Replace = "YabaDaba.du:/"

get-content $SRCFile |
ForEach-Object { $_ -replace ".*:\/", $Text2Replace } | Out-File $DSTFile

它几乎可以正常工作,但是它选择了“:/”字符串左侧的整行,我希望它只选择前一个引号(不包括它)之前的文本:

我应该使用什么正则表达式值来指示上面的脚本只选择前一个引号之前的文本?我一直在尝试Regex101.com,特别是LookBehind,但我没有任何想法。

72qzrwbm

72qzrwbm1#

(?<=.+: ").*:\/可能会完成您的任务,在这种情况下,您还可以将文件作为单个多行字符串读取(因此在代码中使用了-Raw),并使用(?m) flag (Multiline mode)
有关详细信息,请参见https://regex101.com/r/3CXaOI/1

$Text2Replace = "YabaDaba.du:/"

(Get-Content $SRCFile -Raw) -replace '(?m)(?<=.+: ").*:\/', $Text2Replace |
    Out-File $DSTFile

相关问题