[英]Batch - find a string in first 10 characters on line and print whole line
[英]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.