如何在同一行强制输出字符串?

时间:2013-10-30 16:34:45

标签: regex powershell

我有一个文件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

我怎么能这样做?

3 个答案:

答案 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

请注意,这也只会获得文件中的第一个匹配项,如果找不到匹配项,则会失败。