将许多行中的2行复制到新文件中

时间:2015-07-22 11:35:10

标签: powershell

我有一个文本文件,其中包含随机生成的数据,如下所示:

max

我想写下快照名以及要写入另一个文件的createtime,这个文件的所有条目都是这样的:

AllocatedStorage     : 5
InstanceName         : testdatabase
SnapshotName         : testdatabase-05-07-15-00-00
CreateTime           : 05/07/2015 00:00:00 AM

AllocatedStorage     : 10
InstanceName         : testdb
SnapshotName         : testdb-10-07-15-00-00
CreateTime           : 10/07/2015 00:00:00 AM

我能够写出所有条目的快照名称,但不能写入创建时间。我到目前为止所尝试的是:

SnapshotName         : testdatabase-05-07-15-00-00
CreateTime           : 05/07/2015 00:00:00 AM
SnapshotName         : testdb-10-07-15-00-00
CreateTime           : 10/07/2015 00:00:00 AM

我尝试在上面的代码中添加另一个Where-Object,但是没能达到目标。

Get-Content "path\file.txt" | Where-Object {$_ -match 'SnapshotName'} | Set-Content "path\file2.txt"

我知道我错过了一些小事。有人可以帮助我,我怎样才能实现我上面所说的。任何回应都会非常感激。

3 个答案:

答案 0 :(得分:2)

使用select-string的代码较少:

get-content "path\file.txt" | Select-String "^(SnapshotName|CreateTime)" | out-file "path\file2.txt"

答案 1 :(得分:1)

在第一个Where-Object {$ _ -match' SnapshotName'}之后,您只能获得具有SnapshotName的行,因此您无法使用其他Where-Object,因为它将搜索您之前的输出。使用此代码:

Get-Content "path\file.txt" | Where-Object { $_ -match 'SnapshotName' -or $_ -match 'CreateTime' } | Set-Content "path\file2.txt"

答案 2 :(得分:0)

这是使用switch语句和正则表达式

的另一种方法
gc c:\temp\file.txt |%{                                                
    switch -regex ($_){                                                    
        '(SnapshotName.*)' {$Matches[1] |out-file c:\temp\resu.txt -append}    
        '(CreateTime.*)'{$Matches[1] |out-file c:\temp\resu.txt -append}       
    }                                                                                                                                             
}