Скопируйте определенную часть строк из текстового файла в отдельный файл, используя powershell - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть один файл, в котором я хочу найти текст, а затем мне нужно найти начальный и конечный блок.Затем нужно скопировать в другой файл.У меня есть несколько операторов в одном файле.

ниже приведен пример.

1: Start
2: hello 
3: Hello world 
4: Good Morning 
5: End

Я хочу выполнить поиск "Доброе утро", а затем я хочу скопировать текст между начальным и конечным блоком вновый файл.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

С помощью регулярного выражения с lookarounds вы можете найти совпадение
(см. регулярное выражение с различными экранирующими \ = `)

С вашим текстом в файле .\sample.txt, этот фрагмент:

#requires -Version 3.0
[regex]::match((Get-Content .\Sample.txt -raw),"(?sm)(?<=^Start`r?`n).*?Good Morning.*?(?=`r?`nEnd)").Value
#                                                    \  lookbehind /                   \lookahead/

возвращает

hello
Hello world
Good Morning
0 голосов
/ 12 ноября 2018

Следующее даст вам то, что вы хотите. Сначала я взял содержимое txt-файла и поместил его в переменную $doc. Затем, используя встроенную функцию «текстового» поиска powershell, я ищу строку, содержащую «Доброе утро», и если это так, то с помощью регулярных выражений я беру все содержимое между начальным и конечным текстом и создаю новый текстовый файл с этим содержимым. Ниже приведен код.

$doc = Get-Content C:\Scripts\test.txt

      if(Select-String -InputObject $doc -Pattern "Good Morning" -SimpleMatch){
        $contents = [regex]::Match($doc,'(?is)(?<=\b\d: Start\b).*?(?=\b\d: End\b)')
            New-Item -Path C:\Scripts -Name newtest.txt -ItemType File -Value $contents
      }
      Else{
         Write-Host "Nothing Found"
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...