PowerShell替换文本时换行符不生效问题求助
问题原因及解决方法
核心问题
你的两条命令都存在问题,导致换行符无法正确插入:
- 单引号命令的问题:PowerShell中,单引号包裹的是原义字符串,里面的
rn会被当作普通字符(即、r、、n这四个字符),不会被解析为实际的换行符,所以替换后不会产生换行效果。 - 双引号命令的问题:虽然双引号里的
rn会被解析为换行,但Get-Content默认是按行读取文件,返回一个字符串数组。-replace会对数组中的每一行单独执行替换操作,而不是在整个文件的文本流中处理。如果目标字符串"UNION select hash(0)"所在的行被单独处理,插入的换行符会被Set-Content的默认行为(自动为每个数组元素添加换行)干扰,导致效果不符合预期。 - 额外问题:你的文件路径
\C\ELL.sql写法错误,Windows系统下正确的路径应该是C:\ELL.sql,如果路径错误,你修改的可能不是你预期的文件。
正确解决方案
方法1:读取整个文件为单个字符串(推荐)
使用Get-Content的-Raw参数,将整个文件内容当作单个字符串读取,这样-replace就能在全局范围内查找目标字符串并插入换行:
(Get-Content C:\ELL.sql -Raw) -replace "UNION select hash(0)","`r`nUNION select hash(0)" | Set-Content C:\ELL.sql
方法2:使用系统默认换行符
如果偏好使用单引号,可通过[Environment]::NewLine获取系统默认的换行符(Windows下为\r\n),确保替换后插入正确的换行:
(Get-Content C:\ELL.sql -Raw) -replace 'UNION select hash(0)', "$([Environment]::NewLine)UNION select hash(0)" | Set-Content C:\ELL.sql
注意事项
- 执行命令前确保文件未被其他程序占用,否则
Set-Content可能无法写入。 - 建议先备份原文件,避免替换操作导致数据丢失。
内容的提问来源于stack exchange,提问作者Keyle T
相关产品推荐
相关产品推荐

