Regex 如何更改文件中包含的特定行中的字符串,以保留所有其他行?

Regex 如何更改文件中包含的特定行中的字符串,以保留所有其他行?,regex,powershell,Regex,Powershell,我有一个包含以下信息的文件: Type=OleDll Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\..\Windows\SysWOW64\stdole2.tlb#OLE Automation Reference=*\G{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}#1.0#0#..\..\..\..\..\..\..\Windows\SysWOW64\msda

我有一个包含以下信息的文件:

Type=OleDll
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\..\Windows\SysWOW64\stdole2.tlb#OLE Automation
Reference=*\G{7C0FFAB0-CD84-11D0-949A-00A0C91110ED}#1.0#0#..\..\..\..\..\..\..\Windows\SysWOW64\msdatsrc.tlb#Microsoft Data Source Interfaces for ActiveX Data Binding Type Library
Reference=*\G{26C4A893-1B44-4616-8684-8AC2FA6B0610}#1.0#0#..\..\..\..\..\..\..\Windows\SysWow64\Conexion_NF.dll#Zeus Data Access Library 1.0 (NF)
Reference=*\G{9668818B-3228-49FD-A809-8229CC8AA40F}#1.0#0#..\packages\ZeusMaestrosContabilidad.19.3.0\lib\native\ZeusMaestrosContabilidad190300.dll#Zeus Maestros Contables Des (Contabilidad)

我需要使用powershell更改第5行{}个字符之间的数据,并保存更改,保留文件中的所有其他信息

尝试Regex:
(?如果{}的内容始终相同,则可以执行以下操作:

(获取内容$yourfile)-替换$regex,(“{9668818B-3228-49FD-A809-8229CC8AA40F}”)|设置内容$newValue;
一种解决方案:

$Content=Get-Content "C:\temp\test.txt"
$Row5Splited=$Content[4].Split("{}".ToCharArray())
$Content[4]="{0}{1}{2}" -f $Row5Splited[0], "{YOURNEWVALUE}", $Row5Splited[2]
$Content | Out-File "C:\temp\test2.txt"

一种方法是

(.*Reference=\*\\G{)[^\r\n}]+
取而代之的是,

$1any_thing_you_like_to_replace_with
正则表达式电路 可视化正则表达式:


如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配



您可以使用
-replace
操作符执行正则表达式匹配和字符串替换

如果每行只有一对
{}
,您可以在
*?
匹配任何非换行字符时尽可能少地执行以下操作。由于默认情况下
Get Content
创建的对象是一个行数组,因此您可以通过索引访问每行,其中
[4]
为第5行

$content = Get-Content File.txt
$content[4] = $content[4] -replace '{.*?}','{new data}'
$content | Set-Content File.txt

如果每行可能有多个
{}
对,则需要更具体地使用正则表达式(?请发布您尝试过的内容…以及不符合要求的内容。您好,感谢您的帮助。它在静态文件中起到了很好的作用,但文件有时会更改行数,是否有方法搜索特定行并在{}之间更改信息?是的。我添加了最后一节基本上可以做到这一点。感谢您的帮助,我使用您的指南作为构建此正则表达式和学习的起点:
(Reference=\*\\G)[{].[}]*ZeusMaestrosContabilidad.
它工作完美无瑕。再次感谢您。我使用您的结构作为构建脚本的起点,谢谢您。感谢您花时间回答,这是一个很大的帮助。
$content = Get-Content File.txt
$content[4] = $content[4] -replace '(?<=Reference=\*\\G){.*?}','{newest data}'
$content | Set-Content File.txt
Get-Content File.txt -replace '{9668818B-3228-49FD-A809-8229CC8AA40F}','{New Data}' | Set-Content