替换两个字符串 powershell 之间的文本
Replace text between two string powershell
我有一个问题一直困扰着我..
我有一个名为 xml_data.txt 的文件和另一个名为 entry.txt
的文件
我想替换 <core:topics> and </core:topics>
之间的所有内容
我写了下面的脚本
$test = Get-Content -Path ./xml_data.txt
$newtest = Get-Content -Path ./entry.txt
$pattern = "<core:topics>(.*?)</core:topics>"
$result0 = [regex]::match($test, $pattern).Groups[1].Value
$result1 = [regex]::match($newtest, $pattern).Groups[1].Value
$test -replace $result0, $result1
当我 运行 脚本输出到控制台时,它看起来没有做任何更改。
谁能帮帮我
注意:拼写错误已修复
这里主要存在三个问题:
- 您逐行读取文件,但文本块是多行字符串
- 您的正则表达式不匹配换行符,因为
.
默认不匹配换行符
- 此外,在用动态替换模式替换文字正则表达式模式时,您必须始终对
$
符号进行美元转义。或者使用简单的字符串 .Replace
.
所以,你需要
- 将整个文件读入一个变量,
$test = Get-Content -Path ./xml_data.txt -Raw
- 使用
$pattern = "(?s)<core:topics>(.*?)</core:topics>"
正则表达式(可以通过将其展开为 <core:topics>([^<]*(?:<(?!</?core:topics>).*)*)</core:topics>
来增强,以防运行速度太慢)
- 在替换中使用
$test -replace [regex]::Escape($result0), $result1.Replace('$', '$$')
到"protect"$
个字符,或$test.Replace($result0, $result1)
.
我有一个问题一直困扰着我..
我有一个名为 xml_data.txt 的文件和另一个名为 entry.txt
的文件我想替换 <core:topics> and </core:topics>
我写了下面的脚本
$test = Get-Content -Path ./xml_data.txt
$newtest = Get-Content -Path ./entry.txt
$pattern = "<core:topics>(.*?)</core:topics>"
$result0 = [regex]::match($test, $pattern).Groups[1].Value
$result1 = [regex]::match($newtest, $pattern).Groups[1].Value
$test -replace $result0, $result1
当我 运行 脚本输出到控制台时,它看起来没有做任何更改。
谁能帮帮我
注意:拼写错误已修复
这里主要存在三个问题:
- 您逐行读取文件,但文本块是多行字符串
- 您的正则表达式不匹配换行符,因为
.
默认不匹配换行符 - 此外,在用动态替换模式替换文字正则表达式模式时,您必须始终对
$
符号进行美元转义。或者使用简单的字符串.Replace
.
所以,你需要
- 将整个文件读入一个变量,
$test = Get-Content -Path ./xml_data.txt -Raw
- 使用
$pattern = "(?s)<core:topics>(.*?)</core:topics>"
正则表达式(可以通过将其展开为<core:topics>([^<]*(?:<(?!</?core:topics>).*)*)</core:topics>
来增强,以防运行速度太慢) - 在替换中使用
$test -replace [regex]::Escape($result0), $result1.Replace('$', '$$')
到"protect"$
个字符,或$test.Replace($result0, $result1)
.