- 背景**
我正在尝试编写一个小实用程序,它可以搜索文件以查找所有类似于以下内容的行的示例:
[SecuredEndpoint(widgets.UpdateWidget)]
让它看起来像这样:
//[SecuredEndpoint(widgets.UpdateWidget)]
[AllowAnonymous]
到目前为止,我有以下脚本-还没有写回文件..只是先在内存中做所有的事情。
#Find and comment out all [SecuredEndpoint] attributes
(Get-Content -path .\TestController.cs -Raw) -replace '\[SecuredEndpoint','//\[SecuredEnpoint' | Foreach-Object {
$_ # send the current line to output
if ($_ -match "//[SecuredEndpoint")
{
#Add Lines after the selected pattern
"[AllowAnonymous]"
}
}
它正确地注解掉了所有不同的SecuredEndpoint行,但之后并没有插入新行。
[Route("widgets/")]
[HttpGet]
//[SecuredEnpoint(mywidget.GetAll)]
public List<Widgets> GetWidgets()
{
}
[Route("widgets/)]
[HttpPost]
//[SecuredEnpoint(mywidget.Create)]
public List<Widgets> GetWidgets()
{
}
我没有收到任何错误。
- 问题**
我在插入新行的逻辑中遗漏了什么?一旦修复了这个问题,我假设我可以做一些类似这样的事情来将内容保存回文件:
(Get-Content -path .\TestController.cs -Raw) -replace '\[SecuredEndpoint','//[SecuredEnpoint' | Foreach-Object {
$_ # send the current line to output
if ($_ -match "//\[SecuredEndpoint")
{
#Add Lines after the selected pattern
"[AllowAnonymous]"
}
} Set-Content .\TestController.cs
拜托,谢谢!
2条答案
按热度按时间uplii1fm1#
下面的正则表达式替换可以解决这个问题:
有关正则表达式的详细信息,请参见https://regex101.com/r/WZDaEx/2。
如果要使用区分大小写的比较来匹配
SecuredEnpoint
,请改用-creplace
。如果可能已经有注解
[SecuredEnpoint(...)]
行,并且您希望避免添加新的注解层,则可以使用以下命令:有关正则表达式的详细信息,请参见https://regex101.com/r/6gPgws/1。
ogq8wdun2#
快速重构"@圣地亚哥Squarzon“有用答案。请尝试使用此方法。
好吧,如果有多个文件可能需要更新,以及与其他混合字符串内容。