簡體   English   中英

批處理/ Powershell為文件中的每一行替換字符串中的前2個字符

[英]Batch / Powershell replace first 2 characters from string for each line in file

我有這個數據庫,看起來像這樣:

......
CL8596
593005
CM3059
MADX0051
510043
MD0059
512128
MADX0088
......

我需要做的是分別用'CLME'和'MADE'替換以59或51開頭的條目,因此它看起來像這樣:

......
CL8596
CLME3005
CM3059
MADX0051
MADE0043
MD0059
MADE2128
MADX0088
......

我撓頭尋找解決方案,但似乎找不到任何東西。

到目前為止,我唯一的解決方案是輸入以MD0059之類的字母開頭的條目:

(Get-Content .\t.txt) | ForEach-Object { $_ -replace "md", "madr" } | Set-Content .\t.txt . 

這不適用於替換數字,因為某些條目已經包含“ 59”和“ 51”

先感謝您 !

編輯:

此解決方案有效:

(Get-Content .\t.txt) | ForEach-Object -Process {
if ($_ -match '^51')
{
    $_ -replace '^51','MADE'   
}
elseif ($_ -match '^59')
{
    $_ -replace '^59','CLME'
}
else
{
    $_
}
} | Set-Content .\t.txt

謝謝user3482697。

-replace也可以用作數組運算符,因此您實際上不需要foreach

(Get-Content .\t.txt) -replace '^51','MADE' -replace '^59','CLME'|
 Set-Content .\t.txt

replace語句還支持正則表達式,因此以下代碼將起作用:

$data = $data | ForEach-Object -Process {
    if ($_ -match '^51')
    {
        $_ -replace '^51','MADE'   
    }
    elseif ($_ -match '^59')
    {
        $_ -replace '^59','CLME'
    }
    else
    {
        $_
    }
}

user3482697的答案的一種更簡潔且可讀性較低的版本將是這封信。

(Get-Content .\t.txt) |
    ForEach-Object{$_ -replace '^51','MADE' -replace '^59','CLME'} | 
    Set-Content .\t.txt

您可以鏈接運算符-replace (以及其他)。 如果沒有匹配項,則原始線將通過管道

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM