powershell - 使用 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]
请建议如何很好地解决它。
解决方案
尝试这样的事情:
$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..."
注意:这只会检查错误日志的最后一行(我假设您不想尝试解析整个文件)。如果你想让它更健壮一点,你可以自己调整正则表达式,我根据你给出的例子做了一些假设。
推荐阅读
- typescript - 发布应用程序中缺少 ag-dnd-ghost 元素
- sed - 用于附加目录中特定文件扩展名的 Bash 脚本
- rust - 如何在 Rust 中定义 &mut [u8]
- node.js - 如何以角度向现有的pdf文档添加水印?
- html - 主图标未在浏览器中呈现
- jenkins - jenkins gnutls_handshake() 失败:握手失败
- postgresql - max_parallel_workers 与 max_parallel_workers_per_gather
- angular - 如何在 Angular 拦截器中为“Content-Type”标头设置空值?
- javascript - 来自对象数组的javascript深拷贝成员
- css - 来自 Tailwind 的 theme() 无法识别