首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用powershell和regexp替换整行文本?

使用powershell和regexp替换整行文本?
EN

Stack Overflow用户
提问于 2015-05-15 15:52:33
回答 2查看 2.4K关注 0票数 4

我有编程背景,但我对powershell脚本和regexp都很陌生。Regexp一直回避我,我以前的项目从未“强迫”我去学习它。

考虑到这一点,我有一个包含需要替换的文本行的文件。我不能依赖于知道行在哪里,它前面是否有空格,或者被替换的实际文本是什么。我知道将在序言和前面的案文被取代。

我再说一遍,我不知道“替换这个案文”的价值。我只会知道它的序言是什么“以及它之前是什么”。经编辑的任择议定书以澄清。谢谢!

文本行我需要替换

代码语言:javascript
运行
复制
<find-this-text>Replace This Text</find-this-text>

势码

代码语言:javascript
运行
复制
(gc $file) | % { $_ -replace “”, “” } | sc $file
  • 获取文件的内容,将其括在括号中,以确保文件先读取后关闭,这样在试图保存文件时不会引发错误。
  • 遍历每一行,并发出replace语句。,这是我需要帮助的地方.
  • 使用Set内容保存文件。我的理解是,这种方法更好,因为它考虑到编码,比如UTF8。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-15 18:40:21

XML不是面向行的格式(节点可能跨越几行,正如一行可能包含多个节点一样),因此不应该像编辑那样编辑XML。使用适当的XML解析器。

代码语言:javascript
运行
复制
$xmlfile = 'C:\path\to\your.xml'

[xml]$xml = Get-Content $xmlfile
$node = $xml.SelectSingleNode('//find-this-text')
$node.'#text' = 'replacement text'

要将XML保存为"UTF-8不带BOM“格式,可以调用Save()方法,StreamWriter可以做正确的事情™:

代码语言:javascript
运行
复制
$UTF8withoutBOM = New-Object Text.UTF8Encoding($false)
$writer = New-Object IO.StreamWriter ($xmlfile, $false, $UTF8withoutBOM)
$xml.Save($writer)
$writer.Close()
票数 5
EN

Stack Overflow用户

发布于 2015-05-15 16:17:08

正则表达式中的.*被许多人认为是“贪婪的”和危险的。如果包含此标记的行和它的数据不包含任何其他内容,那么根据我的理解,实际上没有任何重大的风险。

代码语言:javascript
运行
复制
$file = "c:\temp\sms.txt"
$OpenTag = "<find-this-text>"
$CloseTag = "</find-this-text>"
$NewText = $OpenTag + "New text" + $CloseTag

(Get-Content $file) | Foreach-Object {$_ -replace "$OpenTag.*$CloseTag", $NewText} | Set-Content $file
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30263775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档