Powershell: заменить текст на определенной строке в файле - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть несколько текстовых файлов, которые выглядят примерно так:


Текст 05-09-18
Текст 17-09-18
Текст 17-09-18

Текст 24-09-18
Текст 17-10-18


В строке 15 в файлах .txt я пытаюсь перейти с 24-09-18 на 24-09-2018.
Меняется только этот, а не другие.

  • [15] заменяет файл .txt пустым.
  • Если [15] нет, то он меняет все даты в текстовом файле.

Вот что я делаю до сих пор:

$infolder = Get-ChildItem C:\folder\*.txt -rec
foreach ($file in $infolder)
{
(Get-Content $file.PSPath) |
Foreach-Object { $_[15] -replace '-18','-2018'} |
Set-Content $file}

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Спасибо за вашу помощь. Это работает для меня, оно ищет файлы в C: \ folder \
. В каждом файле в строке 14 он заменяет -18 на -2018.
Сохраняет все изменения в оригинале.файл.

ForEach ($file in (Get-ChildItem -Path C:\Folder\))
{
$filecontent = Get-Content -path $file 
$filecontent[14] = $filecontent[14] -replace '-18','-2018' 
Set-Content $file.PSpath -Value $filecontent 
}
0 голосов
/ 26 сентября 2018

Get-Content считывает содержимое файла в массив, если используется в качестве правой части оператора присваивания.Поэтому вы можете сделать следующее:

 $filecontent = Get-Content -Path C:\path\to\file.txt
 $filecontent[15] = $filecontent[15] -replace '-18','-2018'
 $Set-Content -Path C:\path\to\file.txt -Value $filecontent

Более подробную документацию вы можете найти на страницах Microsoft для Get-Content , -relace и Set-Content .

Примечание. Массивы PowerShell имеют нулевое происхождение.Если вы хотите изменить шестнадцатую строку, используйте код выше.Если вы хотите изменить пятнадцатую строку, используйте $filecontent[14] вместо $filecontent[15].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...