Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PowerShell替换文件每行的前两个字符_Powershell - Fatal编程技术网

通过PowerShell替换文件每行的前两个字符

通过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出现在文件的其他地方。所以我的替换字符串$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"
[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"