我想使用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
来正确替换...
答案 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'