【问题标题】:How to debug why the replacing of multiline is not working in this PowerShell script?如何调试为什么在此 PowerShell 脚本中无法替换多行?
【发布时间】:2017-08-06 16:53:03
【问题描述】:

我在 PowerShell 脚本中编写了这段代码,但由于某种原因它无法正常工作。程序本身正在运行,但多行的替换不起作用 - 任何人都可以解释为什么?

Function Get-FileName($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | 
Out-Null

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = "SCD (*.scd)| *.scd"
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
}

$inputfile = Get-FileName "C:\Users\Mr.Nephilim\Desktop\ABB"
#$inputdata = get-content $inputfile

#$configFiles = Read-Host 'Enter Complete directory to file'
(Get-Content $inputfile) |
Foreach-Object { 
$_ -replace  '(?ms)^\[\t\n\v\f\r ]<Private type="ABB.*?</Private>', ''
   #-replace '<Terminal .+\/>', '' `
   #-replace '<Terminal .*?>\s<\/Terminal>', '' `
   #-replace '<Private type=\"ABB(.|\n)*?<\/Private>', '' `
   #-replace '<ConnectivityNode.*?>(.|\n)*?<\/ConnectivityNode>', ''
   #-replace '<Terminal .+/>', '' `
   #-replace '<Private type="ABB.*?>.*?</Private>', '' `
   #-replace '<Terminal .+>', '' `
   #-replace '<Private type=\"ABB.*?>', '' `
   #-replace '<esld:.*?>', '' `
   #-replace '<esld:.*?\/>', '' `
   #-replace '</esld:.*?>', '' `
   #-replace '</Private.*?>', '' `
   #-replace '</Terminal.*>', '' `
   #-replace '<ConnectivityNode.*?>', '' `
   #-replace '</ConnectivityNode.*?>', '' 

} |

Set-Content $inputfile

(GC $inputfile)|?{$_.Trim(" `t")}|SC $inputfile

【问题讨论】:

  • 也许你最好解决“替换多行不起作用”的问题。 “不工作”是什么意思?多行是什么意思?
  • \[\t\n\v\f\r ] -> \s, .*? -> [\s\S]*??
  • 也许this可以帮你解决多行问题?
  • 我认为powershell不支持Ansgar \s...我尝试过前2个的任何方式我会看看是否[\s\S] *?工作...

标签: c# powershell


【解决方案1】:

(?s)(.|\s).*?使用这种方式可以做到...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-01
    • 2021-05-13
    • 2015-11-01
    • 2022-10-06
    • 2021-06-09
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多