仅替换文本文件中的一行

时间:2016-07-19 08:57:11

标签: powershell

这是我要修改的文本文件:

Sometext
2016
Sometext
Sometext
6
Sometext

我要修改的两个值是第2行和第5行(索引1和4),它们是当前年份和当前月份。

所以我做了这个PowerShell脚本:

$file = "$PSScriptRoot\myFile.txt"

$date = Get-Date
$year = $date.Year
$month = $date.Month

$oldYear = Get-Content $file | Select -Index 1
$oldMonth = Get-Content $file | Select -Index 4

(Get-Content $file).Replace($oldYear, $year) | Set-Content $file 
(Get-Content $file).Replace($oldMonth, $month) | Set-Content $file

但显然,这一行

(Get-Content $file).Replace($oldMonth, $month) | Set-Content $file

将取代所有" 6"在我当前月份的文件中(当我写这些行时是7),但我只想要替换第5行,而不是第2行。

2 个答案:

答案 0 :(得分:5)

您不需要用新值替换旧值,而是可以通过索引选择适当的行并只替换值:

$content = Get-Content $file
$content[1] = (Get-Date).Year
$content[4] = (Get-Date).Month
$content | Set-Content $file

请注意,Set-Content cmdlet可能会更改文件编码。

答案 1 :(得分:1)

如果有问题的两行是唯一包含数字的行,则可以使用带有正则表达式的switch语句:

$file = "$PSScriptRoot\myFile.txt"

(Get-Content $file) | ForEach-Object {
  switch -regex ($_) {
    '^\d$'    { (Get-Date).Month }
    '^\d{4}$' { (Get-Date).Year }
    default   { $_ }
  }
} | Set-Content $file