Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用powershell替换各行的第一部分和最后一部分_Regex_Powershell_Replace - Fatal编程技术网

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

Regex 如何使用powershell替换各行的第一部分和最后一部分,regex,powershell,replace,Regex,Powershell,Replace,我想使用PowerShell修改文本文件 我想-替换: [将每行开头的替换为享受 LINE]在每行末尾加上LIFE 仅当该行以[REPLACE开头,以行结尾时] 在-replace中使用什么正则表达式来匹配此请求? 示例-文件输入 示例-文件输出 如您所见,在本例中,只有第2行和第4行发生了更改 我想出了这个匹配字符串的方法:-match“^\[REPLACE.*LINE\]$”但我不知道如何使用-REPLACE正确地替换…我认为您需要使用“^”来验证行的开头,而“$”将处理行的结尾。我已经

我想使用PowerShell修改文本文件

我想-替换

  • [将每行开头的
    替换为享受
  • LINE]
    在每行末尾加上
    LIFE
  • 仅当该行以
    [REPLACE
    开头,以
    行结尾时]
在-replace中使用什么正则表达式来匹配此请求?

示例-文件输入

示例-文件输出

如您所见,在本例中,只有第2行和第4行发生了更改

我想出了这个匹配字符串的方法:
-match“^\[REPLACE.*LINE\]$”
但我不知道如何使用
-REPLACE
正确地替换…

我认为您需要使用“^”来验证行的开头,而“$”将处理行的结尾。我已经用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")
}

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

$ResultText = $line.replace("[REPLACE","ENJOY").replace("LINE]","LIFE")
<> > >编辑:< /强>我误解了这个问题,我不认为你可以在文本中间有“替换”。试试下面的:

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

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

正如您所看到的,第一个只替换第一个“[replace”,第二个只替换第一个“LINE]”

尝试以下操作:

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"
使用组占位符(例如,
$1
),例如:


只需尝试字符串替换函数

就像在爪哇一样

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

post regex你现在是using@stetoc我刚刚添加了-match
-match“^\[REPLACE.*LINE\]$”的用法
但我不知道如何将其转换为
-replace
以便能够只替换第一部分和最后一部分,而保留中间部分……如果我理解正确,您可以分两步来解决此问题:1.检查字符串是否与模式匹配2.替换需要替换的内容。是的,我尝试使用此解决方案解决此问题。这不正确。这将替换每个
[replace
行]
,这不是我想要做的。无论如何,感谢您的回答。@JasminStarvors抱歉,我已经编辑了我的答案,请查看是否是您需要的。问候
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"
# $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'
String inputValue="[REPLACE_IN_THIS_LINE]".replaceAll("[REPLACE","Enjoy").replaceAll("LINE]","Life");