Powershell:添加行到.txt文件中

时间:2015-07-09 13:31:56

标签: powershell

我有一个文本(.txt)文件,其中包含以下内容:

Car1
Car2
Car3
Car4
Car5

为了更改随机文本的Car1我使用了这个脚本:

Get-ChildItem "C:\Users\boris.magdic\Desktop\q" -Filter *.TXT | 
Foreach-Object{ 
    $content = Get-Content $_.FullName 
    $content | ForEach-Object { $_ -replace "Car1", "random_text"  } | Set-Content $_.FullName 
}

这工作正常,但现在我想在我的文本文件中的Car2下添加一个文本行。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

只需链接另一个-replace并使用新行!

Get-ChildItem "C:\Users\boris.magdic\Desktop\q" -Filter *.TXT | 
Foreach-Object{ 
    $file = $_.FullName
    $content = Get-Content $file
    $content | ForEach-Object { $_ -replace "Car1", "random_text" -replace "(Car2)","`$1`r`nOtherText" } | Set-Content $file 
}

首先,| Set-Content $_.FullName不起作用,因为该管道中不存在文件对象。所以一个简单的做法就是保存变量以便稍后在管道中使用。您还可以使用ForEach($file in (Get-ChildItem....))构造。

获得所需内容的具体更改是第二个-replace。我们在括号中放置您想要匹配的内容,我们可以在$1的替换字符串中引用它。我们使用反引号来确保PowerShell不将其视为变量。

我们也可以删除一些冗余,因为-replace将对整个文件的字符串起作用

Get-ChildItem "c:\temp" -Filter *.TXT | 
Foreach-Object{ 
    $file = $_.FullName 
    (Get-Content $file) -replace "Car1", "random_text" -replace "(Car2)","`$1`r`nOtherText" | Set-Content $file
}

虽然这适用于您的示例文本,但我想指出更复杂的字符串可能需要更多的技巧以确保您进行正确的更改并且我们使用的替换是基于正则表达式而不需要针对此特定例。

<强> .Replace()

因此,如果您只是进行简单的替换,那么我们可以更新您的原始逻辑。

Foreach-Object{
    $file = $_.FullName 
    $content = Get-Content $_.FullName 
    $content | ForEach-Object { $_.replace("Car1", "random_text").replace("Car2","Car2`r`nOtherText")} | Set-Content $file
}

这就是使用字符串方法.Replace()

链接的简单文本替换