我正在逐行阅读一个文本文件。如果我看到一个特定的字符串,我会定位一个特定字符的第一个和最后一个字符,使用两个子字符串来创建一个较小的字符串,然后替换文本文件中的行。
困难的部分是:我将文本行存储在一个变量中,但不知道如何在文本文档中的旧行上写出这一新行。
请原谅我粗糙的代码--我一直在测试一些东西,几个小时前才开始使用PowerShell。
foreach($line in [System.IO.File]::ReadLines("C:\BatchPractice\test.txt"))
{
Write-Output $line
if ($line.Contains("dsa")) {
Write-Output "TRUEEEEE"
}
$positionF = $line.IndexOf("\")+1
$positionL = $line.LastIndexOf("\")+1
$lengthT = $line.Length
Write-Output ($positionF)
Write-Output $positionL
Write-Output $lengthT
if($line.Contains("\")){
Write-Output "Start"
$combine = $line.Substring(0,$positionF-1) + $line.Substring($postionL,($lengthT-$positionL))
Write-Output $combine
$line1 = $line.Substring(0,$positionF-1)
$line2 = $line.Substring($positionL,($lengthT-$positionL))
$combined = $line1 + $line2
Write-Output $combined
Write-Output "Close"
}
}```
发布于 2020-09-29 09:28:07
您可以在Get-Content
和Set-Content
中将文件另存为数组
$file=(Get-Content "C:\BatchPractice\test.txt")
然后你可以像数组一样编辑它:
$file[LINE_NUMBER]="New line"
其中LINE_NUMBER是从0开始的行号。
然后覆盖到文件:
$file|Set-Content "C:\BatchPractice\test.txt"
您可以在代码中实现此功能。创建一个变量$i=0
,并在循环结束时递增它。这里,$i
将是每次迭代的行号。
HTH
发布于 2020-09-29 11:01:34
根据您的代码,您似乎想要获取任何包含'dsa‘的行,并删除第一个反斜杠之后的内容,直到最后一个反斜杠。如果是这样的话,我建议使用regex简化您的代码。首先,我制作了一个示例文件,因为没有提供任何文件。
$tempfile = New-TemporaryFile
@'
abc\def\ghi\jkl
abc\dsa\ghi\jkl
zyx\vut\dsa\srq
zyx\vut\srq\pon
'@ | Set-Content $tempfile -Encoding UTF8
现在我们将读取所有行(除非这是一个大文件)
$text = Get-Content $tempfile -Encoding UTF8
接下来,我们将创建一个包含要替换的模式的regex对象。双反斜杠是为了对反斜杠进行转义,因为它对正则表达式有意义。
$regex = [regex]'(?<=.+\\).+\\'
现在我们将遍历每一行,如果它有dsa
,我们将对它运行替换,否则我们将输出该行。
$text | ForEach-Object {
if($_.contains('dsa'))
{
$regex.Replace($_,'')
}
else
{
$_
}
} -OutVariable newtext
您将在屏幕上看到输出,但它也是在$newtext
变量中捕获的。我建议在写之前确保它是你想要的输出。
abc\def\ghi\jkl
abc\jkl
zyx\srq
zyx\vut\srq\pon
确认后,只需将其写回文件即可。
$newtext | Set-Content $tempfile -Encoding UTF8
显然,您也可以将这些步骤组合在一起。
$text | ForEach-Object {
if($_.contains('dsa'))
{
$regex.Replace($_,'')
}
else
{
$_
}
} | Set-Content $tempfile -Encoding UTF8
https://stackoverflow.com/questions/64111431
复制相似问题