首页 > 解决方案 > 使用 cmd 或 powershell 从文件中删除字符/字符串

问题描述

我有一个日志文件,每天都会给我以下内容:

进口1:

2019-09-09 19:05:07.568 INFO Stock Record Fetched: alsn_value: 63007409, mtrl: 1, sblc: 1, infc: 2, bacn_value: 9783492058575, locn: 1, chol: 64, shlf: Efm 3.4 SUCH, edatum: 2019-09-09 
2019-09-09 19:05:20.570 INFO Stock Record Fetched: alsn_value: 63012211, mtrl: 1, sblc: 1, infc: 2, bacn_value: 9783125633254, locn: 1, chol: 64, shlf: Ock 2 LANG, edatum: 2019-09-09 

进口2:

2019-09-09 19:05:22.168 INFO Stock Record Fetched: alsn_value: 63012605, mtrl: 1, sblc: 1, infc: 2, bacn_value: 9783193133076, locn: 1, chol: 64, shlf: Odl 7 COLO A2, edatum: 2019-09-09  

我不需要所有的信息。我只需要:

alsn_value: XXXXXXXXXX,   
bacn_value: XXXXXXX,  
shlf  XXXXX XXX XX ,
edatum: xxxx-xx-xx

我使用以下命令选择了它,但我没有得到正确的结果:

$select = Select-String -Path "D:\error.log" -Pattern 'alsn_value:' | select line

$asd = $select.Line.Split(' ')[6,7,14,15]

请建议如何很好地解决它。

标签: powershell

解决方案


尝试这样的事情:

$input_path = "D:\error.log"

$content = Get-Content $input_path -Tail 1
$alsn = $content -replace '.*alsn_value: ([0-9]+).*', '$1'
$bacn = $content -replace '.*bacn_value: ([0-9]+).*', '$1'
$shlf = $content -replace '.*shlf: (.*?),.*', '$1'
$edatum = $content -replace '.*edatum: ([0-9]+-[0-9]+-[0-9]+).*', '$1'

Write-Output "Read alsn: $alsn"
Write-Output "Read bacn: $bacn"
Write-Output "Read shlf: $shlf"
Write-Output "Read edatum: $edatum"
Read-Host -Prompt "Press enter to exit..."

注意:这只会检查错误日志的最后一行(我假设您不想尝试解析整个文件)。如果你想让它更健壮一点,你可以自己调整正则表达式,我根据你给出的例子做了一些假设。


推荐阅读