regex - Powershell RegEx 在空行之后包含所有输出
问题描述
我正在运行一个 exe,它在控制台中获取版本信息和输出。我想将输出保存到一个变量中,但我需要排除空行之前的所有内容,如果可能的话,删除空行之后输出开头的数字,但可以不这样做。我认为那部分会更容易,但我不知道如何在空白之前排除事物。
这是我的输出。它作为字符串返回。
1 USB Receiver
1.1 M525 [off-line]
1.2 M525
1 RQR24.06_B0030
1.1 [off-line]
1.2 RQM27.02_B0028
因此,我一直在尝试使用带有 select-string 的模式来仅在空格后获取输出,但没有任何效果。我希望最终只得到没有前导数字的输出,但只在空白行上工作。所以它看起来像这样:
1 RQR24.06_B0030
1.1 [off-line]
1.2 RQM27.02_B0028
是否有捷径可寻?我尝试过的其他人继续在输出顶部添加一个空格。
解决方案
# Multi-line input string.
$str = @'
1 USB Receiver
1.1 M525 [off-line]
1.2 M525
1 RQR24.06_B0030
1.1 [off-line]
1.2 RQM27.02_B0028
'@
# Get everything starting with the line after the first empty line,
# split it into individual lines, then remove the first token and subsequent
# whitespace from each line.
($str -split '\r?\n\r?\n', 2)[1] -split '\r?\n' -replace '^[^ ]+ +'
注意:如果您的输入来自文件,请替换$str
为(Get-Content -Raw file.txt)
以上产生(一个字符串数组,每个元素在自己的行上):
RQR24.06_B0030
[off-line]
RQM27.02_B0028
解释:
$str -split '\r?\n\r?\n', 2
将输入拆分为前两个连续的换行符(\r?\n
匹配 Windows 样式的 CRLF 和 Unix 样式的 LF-only 换行符);2
表示最多应创建 2 个令牌。(...)[1]
提取第二个标记,即第一个空行之后的所有内容。-split '\r?\n'
将生成的标记拆分为单独的行-replace '^[^ ]+ +'
有效地从每行删除第一个标记以及它后面的空格,只留下第二个空格分隔的标记。
推荐阅读
- angular - 在 Angular CLI 中的两个组件之间发送数据:11.2.7
- python - 如何检测 shutil.copytree 是否完成复制?
- java - 从基于 MVVM 的架构的片段的 XML 中单击按钮的侦听器不起作用
- swagger - express openapi验证器似乎不起作用
- coq - 如何从 Frama-C WP 插件生成 Coq 文件
- c# - 如何解决以下示例的装箱或转换错误?
- python - 如何通过 PyGitHub 棒进行更改
- c# - 与 Bot Telegram 通信困难 - C# - package telegram.bot
- php - 当 Condition by ID php 变量时,mySql LEFT JOIN 未按预期返回数据
- python-3.x - Elasticsearch 搜索字段