powershell 为文件中的每一行提取子字符串

ujv3wf0j  于 2022-11-29  发布在  Shell
关注(0)|答案(2)|浏览(89)

使用Powershell,我只是试图从任何以6开头的记录的第37位开始提取15个字符。我想循环并为每个示例生成一个记录,以便稍后将其放入输出文件。但我似乎没有找到正确的语法,只是返回15个字符。我知道我错过了一些明显的东西。我已经做了一段时间了。下面是我的脚本:

$content = Get-Content -Path .\tmfhsyst*.txt | Where-Object { $_.StartsWith("6") }

foreach ($line in $contents) 
{
  $val102 = $line.substring(36,15)
}

write-output $val102
twh00eeo

twh00eeo1#

正如Bill_Stewart所指出的,需要将Write-Output行移动到ForEach循环中。一种可能更好的方法是使用管道:

Get-Content -Path .\tmfhsyst*.txt | Where-Object { $_.StartsWith("6") } | foreach{$_.substring(36,15)}

这应该会给予你你想要的输出。

jm81lzqq

jm81lzqq2#

使用Substring()的缺点是,如果字符串比起始索引+子字符串长度短,它将引发错误。您可以使用正则表达式匹配来避免这种情况:

(Get-Content -Path .\tmfhsyst*.txt) -match '^6.{35}(.{15})' | % { $matches[1] }

相关问题