【问题标题】:Powershell regex multiline find and replacePowershell 正则表达式多行查找和替换
【发布时间】:2015-06-07 22:20:25
【问题描述】:

我有一个与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

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

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

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

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

    demo

    【讨论】:

    • 谢谢!那个演示网站也很棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2011-06-16
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多