批处理文件-从日志文件中提取文本

问题描述 投票:-2回答:1

我需要从日志文件中提取主机密钥,然后通过批处理文件将其放入变量中,以便可以将其输出到另一个文本文件中。我知道如何逐行读取文件,但不知道如何从该文件中提取数据。

日志中的两行特别显示如下:

. 2020-01-15 20:40:52.125 Host key fingerprint is:
. 2020-01-15 20:40:52.125 ssh-ed25519 256 11:aa:11:aa:22:c2:22:33:4d:55:aa:dd:2e:99:99: 111A/A1A1xaAA/abc1AAAaa1aaaaaaaAAaaaA/a/11AA=

因此,我需要具有“主机密钥指纹”的行下面的数据-我认为这是搜索的最佳字符串,因为这是日志中唯一出现“指纹”一词的时间-“ ssh-ed25519”位于日志的几行。我只需要从最后一个空格到行尾(有回车符-^ M $)的数据,因此在这种情况下,我需要11:aa:11:aa:22:c2: 22:33:4d:55:aa:dd:2e:99:99:111A / A1A1xaAA / abc1AAAaa1aaaaaaaAAaaaaa / a / 11AA =放入变量中。

我不确定如何执行此操作。我曾尝试进行研究,但找不到与此相关的任何特定内容。

batch-file text-extraction
1个回答
0
投票

Robert Harvey与批处理文件中的空格分割的链接使我想到了在Powershell中进行此操作的方法。感谢Robert Harvey,提出了适用于Powershell而不是批处理文件的解决方案。这是我想出的-经过测试可以正常工作。

# variables 
$source = "C:\logs\GetWinSCPKey.log"
$destination = "C:\programs\paramWinSCP.txt"

# look for key line after "fingerprint" line 
$hit = select-string -Path $source -SimpleMatch "fingerprint"
$filecontents = get-content $source

#split that line on spaces and take put the last field into variable
$hostkey = $filecontents[$hit.linenumber].Split()[-1]

# Output first line of text file with new variable
"open sftp://phoenix@localdhcp -hostkey=`"ssh-ed25519 256 $hostkey`" -privatekey=C:\Users\phoenix\.ssh\id_rsa.ppk" | out-file $destination  
© www.soinside.com 2019 - 2024. All rights reserved.