Как удалить строку и замену содержанием, найденным в текстовом файле с помощью сценария пакетной обработки или 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

Удалите любой текст, найденный между "Импортом": и "Представление": и замените его содержанием от демонстрационного текстового файла..

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

я удаляю все между Импортом: и Представление: но это разрушает текстовую структуру.

0
задан 11 May 2015 в 21:55
1 ответ
-

Ты должен разобрать его. Пройдитесь по каждой строке в поисках Импорт: . Когда вы найдете его, установите флаг, верните содержимое образца, затем проигнорируйте все до тех пор, пока не доберетесь до 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 $_

    }
0
ответ дан 5 December 2019 в 12:45

Теги

Похожие вопросы