我有一个文件serviceOut_live.txt
,其中包含以下行:
[GC 1028838K->827912K(1305024K), 0.0311954 secs]
我想将文件serviceOut_live.txt
转换为另一个文件resul.txt
,格式为:
1028838 20131030165102
这是我的代码:
$input_path = 'c:\a\a\serviceOut_live.txt'
$output_file = 'c:\a\a\resul.txt'
$regex = '\[GC (\d{0,9})K->(\d{0,9})'
echo $(select-string -Path $input_path -Pattern $regex -AllMatches | % {
$_.matches[0].groups[1].value , $(get-date -format "yyyyMMddHHmmss")
} ) > $output_file
但结果分为两行:
1028838
20131030165102
我想把结果放在一行:
1028838 20131030165102
我怎么能这样做?
非常感谢您的提示。 我想我没有解释过自己。 这是原始文件: [GC 1028838K-> 827912K(1305024K),0.0311954秒] 我希望结果有多行:
\ n =回车
1028838 20131030165102 \ n 1028822 20131030165103 \ n 1029999 20131030165107 \ n
我怎么能这样做?
答案 0 :(得分:2)
将每一行替换为在第一个空格之后和“K”之前找到的匹配的数字组,然后将其与当前日期连接
Get-Content $input_path |
ForEach-Object { ($_ -replace '^\[GC (\d+)K->.*$','$1') +' '+ (get-date -f yyyyMMddHHmmss) } |
Out-File $output_file
答案 1 :(得分:1)
一种方法是将其转换为[string]:
echo ([string]$(select-string -Path $input_path -Pattern $regex -AllMatches |
% { $_.matches[0].groups[1].value , $(get-date -format "yyyyMMddHHmmss") } )) > $output_file
答案 2 :(得分:0)
如果你喜欢很长的行(我没有):
$(select-string -Path $input_path -Pattern $regex -AllMatches).Matches[0].Groups[1].Value + " " + (get-date -f yyyyMMddHHmmss) > $output_file
请注意,这也只会获得文件中的第一个匹配项,如果找不到匹配项,则会失败。