首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell -剪切、合并和简化文件中的行

Powershell -剪切、合并和简化文件中的行
EN

Stack Overflow用户
提问于 2019-11-04 21:44:24
回答 1查看 136关注 0票数 0

我有一个file.txt,它有以下几行:

代码语言:javascript
复制
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行转换为一行,如:

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 04:24:25

如果要在文件中插入自定义字符串的位置并不重要,则可以执行以下操作:

代码语言:javascript
复制
$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")

如果字符串的插入点重要,则需要一些方法来确定该行号。有许多方法可以做到这一点。以下内容只读取一次文件,循环遍历文件的每一行,并跟踪包含第一个字符串匹配的行号。

代码语言:javascript
复制
$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"))    
$out
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58701511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档