如何从文本文件复制一组数字

如何从文本文件复制一组数字

我有一个包含以下内容的文本文件:

    ---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

相关内容