试图在Powershell中解析一些子串

时间:2015-08-31 18:09:18

标签: string powershell

我一直在试图在Powershell中做一个相当简单的子串搜索。

我有一个包含以下内容的文本文件:

2015-08-30 13:12:59 10944512 DATACLUS1 \ RandomDBName_FULL_20150823_044919.bak 2015-08-30 13:12:59 11010048 DATACLUS1 \ RandomDBName_FULL_20150830_050126.bak

我需要提取文件名(“DATACLUS1 \ RandomDBName_FULL_20150823_044919.bak”),然后比较以查看数据标记(本例中为20150823)之后创建的文件名,然后输出到文本文件仅包含稍后要在此过程中执行的全名。

我已经完成了正则表达式,匹配和子字符串,但找不到可以让我可靠地提取数据的组合。一旦我遇到这个障碍,我就可以进行比较了。

1 个答案:

答案 0 :(得分:0)

如果您愿意,可以在没有广泛正则表达式的情况下执行此操作(假设文件中的每一行都是换行符。

# Fetch the lines of your backup file 
$lines = (Get-Content .\backup.data);
# Format the items in a proper way
$formattedItems = $lines|Select-Object @{Name="Filename"; Expression={($_ -split " ")[3]}}, @{Name="DataStamp"; Expression={(($_.Trim() -split " ")[-1] -split "_")[-2]}}, @{Name="TimeString"; Expression={(($_.Trim() -split " ")[-1] -split "_")[-1] -replace ".bak" ,""}};;    # Sort the items by the new property DateString
$sortedItems=$formattedItems|Sort-Object -Property DataStamp

这将为您提供一个排序列表,其中包含您可以选择的属性(例如 你可以使用$ sortedItems的第一个[0]。

如果您不想对DataStamp进行排序,可以选择DateTime标记(在每行的开头,排序可能更可靠)。