【发布时间】:2015-07-27 15:07:40
【问题描述】:
我有编程背景,但我对 powershell 脚本和正则表达式都很陌生。正则表达式一直让我望而却步,而我之前的项目也从未“强迫”我学习它。
考虑到这一点,我有一个文件,其中包含需要替换的一行文本。我不能依赖于知道该行存在的位置,它前面是否有空格,或者被替换的实际文本是什么。我知道在被替换的文本之前和之前会出现什么。
再次,我不会知道“替换此文本”的价值。我只会知道它“”的前言和“”的前言。编辑 OP 以澄清。谢谢!
我需要替换的文本行
<find-this-text>Replace This Text</find-this-text>
潜在代码
(gc $file) | % { $_ -replace “”, “” } | sc $file
获取文件的内容,将其括在括号中,以确保文件先被读取然后关闭,这样在尝试保存文件时不会引发错误。
遍历每一行,并发出替换语句。 这是我可以寻求帮助的地方。
使用 Set-Content 保存文件。我的理解是这种方法更可取,因为它考虑了编码,如UTF8。
【问题讨论】:
-
你需要这些都在一行,还是可以是一个脚本?
-
@Tony Hinkle - 脚本可以工作,甚至可能更可取!
-
另见:stackoverflow.com/questions/17144355/… 这个问题可能应该作为副本关闭。如果该页面上的答案是您需要的,请告诉我,我会标记此答案以供版主删除。
-
您是否有
find-this-text标签所建议的 XML 文件,或者数据只是纯文本,您需要在要替换的文本之前和之后匹配一些已知的文本片段?如果是 XML,则不应使用简单的字符串替换。另外,您究竟需要更换什么?只是已知片段之间的文字?还是整条线?如果是后者:结果应该是什么样子? -
这是一个 XML 文件,我已经尝试通过将 XML 文件转换为 XML 来修改 XML 文件,然后使用 XML cmdlet 导航和替换该值。我遇到的问题是,通过使用 Xml.Save 它将编码类型从“UTF-8 without BOM”更改为“UTF-8”。这似乎没什么大不了的,但它会导致程序解析 xml 配置文件失败。它期待“没有 BOM 的 UTF”编码格式。我想通过使用“Set-Content”方法并将其解析为常规文本文件,它将保留 ORIGINAL 编码类型。
标签: regex powershell