如何使用powershell替换每行的第一部分和最后一部分

时间:2018-07-18 07:45:00

标签: regex powershell replace

我想使用PowerShell修改文本文件。

我想替换

  • [REPLACE在每一行的开头,ENJOY
  • LINE]位于每行的结尾,LIFE
  • 仅当该行以[REPLACE开始并以LINE]结尾时

-replace中用于匹配此请求的正则表达式是什么?

示例-文件输入

[REPLACE_IN_THIS_LINE]
[DO_NOT_REPLACE_IN_THIS_LINE_PLEASE]
[REPLACE_VERY_MUCH_IN_THIS_LINE]
Do not replace in this line[REPLACE_IN_THIS_LINE]

示例-文件输出

ENJOY_IN_THIS_LIFE
[DO_NOT_REPLACE_IN_THIS_LINE_PLEASE]
ENJOY_VERY_MUCH_IN_THIS_LIFE
Do not replace in this line[REPLACE_IN_THIS_LINE]

如您所见,在此示例中,仅第二行和第四行已更改...

我想出了一个用于匹配字符串-match "^\[REPLACE.*LINE\]$"的方法,但是我不知道如何使用-replace来正确替换...

5 个答案:

答案 0 :(得分:1)

我认为您需要使用“ ^”将验证行的开始,而“ $”将处理行的结束。我已经用Java编写了代码,但是您可以使用此正则表达式。

String input="[REPLACE_IN_THIS_LINE]"
Pattern Pat=Pattern.compile(("^(\\[REPLACE)(.)*(LINE\\])$"));
Matcher Mat=Pat.matcher();
if(Mat.find())
{
    input=input.replace("[REPLACE","Enjoy").replace("LINE]","Life")
}

答案 1 :(得分:1)

只需尝试使用字符串替换功能。

与Java一样

String inputValue="[REPLACE_IN_THIS_LINE]".replaceAll("[REPLACE","Enjoy").replaceAll("LINE]","Life");

答案 2 :(得分:0)

您必须调用replace两次,对于要替换的每个字符串调用一次,考虑到使用循环访问每一行,您必须执行以下操作:

$ResultText = $line.replace("[REPLACE","ENJOY").replace("LINE]","LIFE")

编辑:我误解了这个问题,我不认为您可以在文本中间加上“ [REPLACE””。请尝试以下操作:

'[REPLACE_IN_THIS_LINE][REPLACE' -replace '^\[REPLACE(.*?)', 'ENJOY$1'

然后:

'[REPLACE_IN_THIS_LINE][REPLACE_LINE]' -replace '(.+?)LINE\]$', '$1LIFE'

如您所见,第一个仅替换第一个“ [REPLACE”,第二个仅替换第一个“ LINE]”。

答案 3 :(得分:0)

尝试这样的东西:

Get-Content "C:\temp\test.txt" |%{

    if ($_ -like 'ENJOY*LIFE')
    {
      "[REPLACE{0}LINE]" -f $_.Substring(5, $_.Length -9)
    }
    else
    {
        $_
    }


} | Set-Content "c:\temp\result.txt"

答案 4 :(得分:0)

使用组占位符(例如$1),例如:Powershell regex group replacing

# $a = Get-Content .\Input.txt
$a = "[REPLACE_IN_THIS_LINE]",
     "[DO_NOT_REPLACE_IN_THIS_LINE_PLEASE]",
     "[REPLACE_VERY_MUCH_IN_THIS_LINE]",
     "Do not replace in this line[REPLACE_IN_THIS_LINE]"

$a -Replace '^\[REPLACE(.*)LINE\]$', 'ENJOY$1LIFE'