Powershell正则表达式多行查找和替换

时间:2015-06-07 22:20:26

标签: regex powershell

我有一个与Multiline Regex in PowerShell非常相似的问题,但我似乎无法让我的表达起作用。很像我需要解析文件并替换我想要的东西的另一个问题。我的问题是,我正在寻找的东西不是一个固定的字符串,而是一个像这样的多行日志条目:

$log_number
$entry
$tag

我需要使用新字符串替换带有选定标记的每个条目。到目前为止我已经

(Get-Content $($parent_dir + $old_name + ".log")) | 
    Out-String | 
    ForEach-Object {$_ -replace "", "This is a test"} | 
    Set-Content $($parent_dir + $new_name + ".log")

但我似乎无法找到一个与我正在寻找的格式相匹配的正则表达式查询。我试图修改我在这个问题上找到的一个:Multiline regex to match config block

'(?smi)([0-9]{1, }(\s*$)){2}.*?S0B0L'

但这似乎并没有起作用。我完全被难过了,任何帮助都会受到赞赏!

示例:

39983
"set x 1"
random_user

39984
"set x 45"
S0B0L

39985
"set x 23"
random_user

变为:

39983
"set x 1"
random_user

This is a test

39985
"set x 23"
random_user

1 个答案:

答案 0 :(得分:1)

我几乎可以肯定问题是你的正则表达式正在寻找数字和空格2次,然后是任何字符,包括换行符,然后是S0B0L

将匹配3行文本条带的正则表达式,其第一行由数字组成,第3行为S0B0L

(?i)[0-9]+[\r\n]+.*[\r\n]+S0B0L

请参阅demo