我有一个包含以下内容的文本文件:
---Processing--------------------------
---------------------------------------
Installation ID for: Office 19, Office19ProPlus2019MSDNR_Retail edition:
740589284218418791604841349389902966367300853905012096424324006
---------------------------------------
---------------------------------------
---Exiting-----------------------------
我只想复制一组数字,我使用了该代码:
powershell -c "$(sls '[0-9]+' OfficeIid.txt -allm).Matches.Value"
输出为:
19 19 2019
740589284218418791604841349389902966367300853905012096424324006
我怎样才能只复制从 740 开始的数字集(数字会发生变化)
答案1
PowerShell:您当前的命令:
"$(sls '[0-9]+' OfficeIid.txt -allm).Matches.Value"
返回值每一个项目$匹配集合。添加索引-1
仅返回最后一场比赛:
"(sls '[0-9]+' OfficeIid.txt -allm).Matches[-1].Value"
数据/输出:
PS C:\...\Select-String>gc test.txt
---Processing--------------------------
---------------------------------------
Installation ID for: Office 19, Office19ProPlus2019MSDNR_Retail edition:
740589284218418791604841349389902966367300853905012096424324006
---------------------------------------
---------------------------------------
---Exiting-----------------------------
PS C:\...\Select-String>(sls '[0-9]+' test.txt -allm).Matches[-1].Value
740589284218418791604841349389902966367300853905012096424324006
PS C:\...\Select-String>
答案2
这是一个稍微不同的方法。[咧嘴笑] 它假定所需的数字字符串是输入中唯一的数字字符串,并且它独自占据一行,并且 10 位数字足以排除不需要的数字。
它能做什么 ...
- 当准备使用真实数据时,创建一个字符串数组
,删除整个#region/#endregion
块并用于Get-Content
加载文本文件。 - 定义考虑“这就是那个”的最小位数
- 使用运算符工作的方式,
-match
当左侧有一个集合时,
它不会给出布尔值,而是给出匹配项。在这种情况下,只有一个项目。 - 修剪掉所有前导/尾随空格
- 将结果赋给 $Var
- 显示该 $Var 的内容
代码 ...
#region >>> fake reading in a text file
# in real life, use Get-Content
$InStuff = @'
---Processing--------------------------
---------------------------------------
Installation ID for: Office 19, Office19ProPlus2019MSDNR_Retail edition:
740589284218418791604841349389902966367300853905012096424324006
---------------------------------------
---------------------------------------
---Exiting-----------------------------
'@ -split [System.Environment]::NewLine
#endregion >>> fake reading in a text file
$MinDigits = 10
$BunchaDigits = ($InStuff -match "\d{$MinDigits,}").Trim()
$BunchaDigits
输出 ...
740589284218418791604841349389902966367300853905012096424324006