如何在PowerShell中有效地创建多个替换命令

问题描述 投票:0回答:2

我可以看到自己多次使用get-content命令是愚蠢的,有谁知道如何提高效率?

(Get-Content hvor_har_vi_vaeret_i_aar.html) -replace '"', '"' | set- 
content hvor_har_vi_vaeret_i_aar.html
(Get-Content hvor_har_vi_vaeret_i_aar.html) -replace 'ae', 'æ' | set-content 
hvor_har_vi_vaeret_i_aar.html
(Get-Content hvor_har_vi_vaeret_i_aar.html) -replace 'o/', 'ø' | set-content 
hvor_har_vi_vaeret_i_aar.html
(Get-Content hvor_har_vi_vaeret_i_aar.html) -replace 'aa', 'å' | set-content 
hvor_har_vi_vaeret_i_aar.html

我希望我能够很好地解释这一点,如果有什么你不明白然后只是写,那么我会试着澄清。

BTW有没有人知道如何使它区分大小写,如AE =Æ而不是æ?

powershell
2个回答
1
投票

行动替换一次你只需要使用Get/Set-Content一次:

(Get-Content hvor_har_vi_vaeret_i_aar.html) -replace '"','"' -replace 'ae','æ' -replace 'o/','ø' -replace 'aa', 'å' | Set-Content hvor_har_vi_vaeret_i_aar.html

相同但使用反引号将命令拆分为多行以使其更具可读性:

(Get-Content hvor_har_vi_vaeret_i_aar.html) `
    -replace '"','"' `
    -replace 'ae','æ' `
    -replace 'o/','ø' `
    -replace 'aa', 'å' |
    Set-Content hvor_har_vi_vaeret_i_aar.html

0
投票

您可以使用的另一种方法,我个人更喜欢,因为它很容易让您将这些作为参数传递给函数,是声明一个2D数组并循环遍历它:

$string = 'abcdef'

$replaceArray = @(
                 @('a','1'),
                 @('b','2'),
                 @('c','3')
                )

# =============

$replaceArray | 
    ForEach-Object {
        $string = $string -replace $_[0],$_[1]
    }

Write-Output $string

123def

如果您只想从字符串中删除项目,则更容易,因为您可以执行以下操作:'a','b','c' | % {$string = $string -replace $_}

© www.soinside.com 2019 - 2024. All rights reserved.