Как удалить строку и заменить ее содержимым, найденным в текстовом файле, используя пакетный скрипт или powershell
Как удалить строку и заменить ее содержимым, найденным в текстовом файле, используя пакетный скрипт.
test.txt
Version: 4.5.0
Import:
//MPackages/Project/config/abc.txt #head
//Packages/Project/config/cde.txt #head
View: 24234
//MPackages/Project/config/ac.txt #head
Удалите любой текст, найденный между "Import:" и "View:", и замените его содержимым из образца текстового файла.
sample.txt
1
2
3
Желаемый вывод
Version: 4.5.0
Import:
1
2
3
View: 24234
//MPackages/Project/config/ac.txt #head
образец сценария
[string]$f=gc Test.txt;
$pL=$f.IndexOf('Import:')+'Import:'.Length;$pR=$f.IndexOf('View:');
$s=$f.Remove($pL,$pR-$pL) | set-content Test.txt
Я удаляю все между Import: и View: но это разрушает текстовую структуру.
1 ответ
Решение
Вы должны разобрать это. Пройдите каждую строку в поисках Import:
, Когда вы обнаружите, что он установил флаг, верните образец содержимого, а затем игнорируйте все, пока не доберетесь до View:
, Тогда начни возвращать все снова. Промыть, повторить.
$sampleContent = Get-Content 'Sample.txt'
$inImport = $false
Get-Content -Path 'Test.txt' |
ForEach-Object {
if( $inImport )
{
if( $_ -like 'View:*' )
{
$inImport = $false
return $_
}
return
}
if( $_ -like 'Import:*' )
{
$inImport = $true
$_
return $sampleContent
}
return $_
}