我有一个file.txt,它有以下几行:
Other lines...
...
Microsoft .NET Core SDK 2.1.801 (x64)
Microsoft .NET CoreRuntime For CoreCon
Microsoft .NET CoreRuntime SDK
Microsoft .NET Framework 3.5 Targeting Pack (enu)
Microsoft .NET Framework 4 Multi-Targeting Pack
Microsoft .NET Framework 4.5 Multi-Targeting Pack
Microsoft .NET Framework 4.5.1 Multi-Targeting Pack
Microsoft .NET Framework 4.5.1 Multi-Targeting Pack (ENU)
Microsoft .NET Framework 4.5.1 SDK
Microsoft .NET Framework 4.5.2 Multi-Targeting Pack
Microsoft .NET Framework 4.5.2 Multi-Targeting Pack (ENU)
Microsoft .NET Framework 4.6 Targeting Pack
Microsoft .NET Framework 4.6.1 Targeting Pack
Microsoft .NET Framework 4.7.1 Doc Redirected Targeting Pack (ENU)
Microsoft .NET Framework 4.7.1 Targeting Pack
Microsoft .NET Framework 4.7.2 SDK
Microsoft .NET Framework 4.7.2 Targeting Pack
Microsoft .NET Framework 4.7.2 Targeting Pack (ENU)
Microsoft .NET Framework Cumulative Intellisense Pack for Visual Studio (ENU)
Microsoft .NET Native SDK
Windows Desktop SDK
...
Etc如何将多个.NET行转换为一行,如:
Microsoft .NET Framework [3.5] [4] [4.5] [4.5.1] [4.5.2] [4.6] [4.6.1] [4.7.1] [4.7.2]并删除此块中所有其他与.NET相关的行?
(使用powershell)
发布于 2019-11-05 04:24:25
如果要在文件中插入自定义字符串的位置并不重要,则可以执行以下操作:
$hash = [collections.arraylist]@()
[collections.arraylist]$out = switch -regex -file file.txt {
'Microsoft .NET Framework (\d[\d\.]*)' {
if ($hash -notcontains "[$($Matches[1])]") {
[void]$hash.Add(("[{0}]" -f $Matches[1])) }
}
default { $_ }
}
$out,("Microsoft .NET Framework {0}" -f "$hash")如果字符串的插入点重要,则需要一些方法来确定该行号。有许多方法可以做到这一点。以下内容只读取一次文件,循环遍历文件的每一行,并跟踪包含第一个字符串匹配的行号。
$hash = [collections.arraylist]@()
$firstIndex = 0
$data = Get-Content file.txt
[collections.arraylist]$out = for ($i = 0; $i -lt $data.count; $i++) {
if ($data[$i] -match 'Microsoft .NET Framework (\d[\d\.]*)') {
if (!$firstIndex) {
$firstIndex = $i
}
if ($hash -notcontains "[$($Matches[1])]") {
[void]$hash.Add(("[{0}]" -f $Matches[1]))
}
}
else {
$data[$i]
}
}
$out.Insert($firstIndex,("Microsoft .NET Framework {0}" -f "$hash"))
$outhttps://stackoverflow.com/questions/58701511
复制相似问题