通过PowerShell替换文件每行的前两个字符
我有一个文件需要替换每行的前两个字符。这看起来很简单,但同样的前两个字符| 0出现在文件的其他地方。所以我的替换字符串$bp到处都是。有没有办法只为每一行替换| 0的第一个实例?以下是示例数据:通过PowerShell替换文件每行的前两个字符,powershell,Powershell,我有一个文件需要替换每行的前两个字符。这看起来很简单,但同样的前两个字符| 0出现在文件的其他地方。所以我的替换字符串$bp到处都是。有没有办法只为每一行替换| 0的第一个实例?以下是示例数据: 0|Corrupt Record|0|0|0|0|0|0|0|0|0 我相信还有其他方法可以做到这一点,但我的方法是这样的 要仅替换第一次出现的0 |并保留剩余的停留时间,您可以这样替换它 $CorruptString = "0|Corrupt Record|0|0|0|0|0|0|0|0|0" [r
0|Corrupt Record|0|0|0|0|0|0|0|0|0
我相信还有其他方法可以做到这一点,但我的方法是这样的 要仅替换第一次出现的0 |并保留剩余的停留时间,您可以这样替换它
$CorruptString = "0|Corrupt Record|0|0|0|0|0|0|0|0|0"
[regex]$ToReplace = "0\|"
$ToReplace.replace($CorruptString, "", 1)
这将输出:
腐败记录| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
只需一个简单的正则表达式来替换损坏的字符串,并将其替换为nothing或任何您想要替换的内容。自然,1是这样的,它只做一次
我相信这就是你想要的。如果没有,试着解释更多
编辑:因为这篇文章有些混乱。要替换字符串中的前两个字符,只需执行substring来删除前两个字符
"0|Corrupt Record|0|0|0|0|0|0|0|0|0".Substring(2)
你的问题不清楚| 0对0 |
如果每行的前两个字符为0 |,则可以使用此代码段替换它们:
请通过发布示例输入和示例代码来改进您的问题。Get-Content filepath | ForEach对象{$|-replace^\| 0,}| Set Content filepath。^表示字符串的开头,反斜杠转义|,这是正则表达式中的一个特殊字符。@sodawillow Get Content filepath |。。。如果你想写入同一个文件,我尝试了以下方法:gc$OutDrive\file | ForEach对象{$\uu-replace^\\u124; 0,newstuff},但这并不是改变前两个字符的大小。前两个字符、'前两个字符| 0'和'First instance of | 0'是三个不同的东西-是哪一个?请重新阅读问题。OP希望用变量$bp的值替换每行中第一个出现的0 |,而不是完全删除它。这里不需要ForEach-Object。-replace运算符同时适用于字符串和字符串数组。
$oldContent = Get-Content "my/file"
$newContent = $OldContent | ForEach-Object { $_ -replace "^0\|","newstring" }
# simpler
#$newContent = $OldContent -replace "^0\|","newstring"
$newContent | Set-Content "my/file"