使用Powershell将文本文件中特定行的部分复制到单独的文件中

时间:2018-11-12 19:03:28

标签: powershell

我有一个文件,我想在其中搜索文本,然后需要查找开始和结束块。然后需要复制到另一个文件。我在同一文件中有多个语句。

下面是一个例子。

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

我想搜索“早安”,然后将开始和结束之间的文本复制到新文件中。

2 个答案:

答案 0 :(得分:1)

使用带有lookarounds的正则表达式,您可以找到匹配项
(请参见regex live的转义\ =`)

将您的文本放在文件.\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

答案 1 :(得分:0)

以下内容将为您提供所需的东西。首先,我获取了txt文件的内容,并将其放在$doc变量中。 然后,使用powershell的本机“文本”搜索功能查找包含“ Good Morning”的字符串,如果是这样,则使用正则表达式获取起始文本和结束文本之间的所有内容,并使用这些内容创建一个新的txt文件。下面是代码。

$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"
      }