Batch / 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
谢谢用户3482697。
替换语句也支持正则表达式,所以下面的代码可以工作:
$data = $data | ForEach-Object -Process {
if ($_ -match '^51')
{
$_ -replace '^51','MADE'
}
elseif ($_ -match '^59')
{
$_ -replace '^59','CLME'
}
else
{
$_
}
}
用户 3482697 的答案的一个更简洁且可读性较差的版本将是这个衬垫。
(Get-Content .\t.txt) |
ForEach-Object{$_ -replace '^51','MADE' -replace '^59','CLME'} |
Set-Content .\t.txt
您可以链接运算符 -replace
(以及其他运算符)。如果没有匹配项,则原始行通过管道
-replace
也可以用作数组运算符,因此您实际上并不需要 foreach
(Get-Content .\t.txt) -replace '^51','MADE' -replace '^59','CLME'|
Set-Content .\t.txt
我有这样的数据库:
......
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
谢谢用户3482697。
替换语句也支持正则表达式,所以下面的代码可以工作:
$data = $data | ForEach-Object -Process {
if ($_ -match '^51')
{
$_ -replace '^51','MADE'
}
elseif ($_ -match '^59')
{
$_ -replace '^59','CLME'
}
else
{
$_
}
}
用户 3482697 的答案的一个更简洁且可读性较差的版本将是这个衬垫。
(Get-Content .\t.txt) |
ForEach-Object{$_ -replace '^51','MADE' -replace '^59','CLME'} |
Set-Content .\t.txt
您可以链接运算符 -replace
(以及其他运算符)。如果没有匹配项,则原始行通过管道
-replace
也可以用作数组运算符,因此您实际上并不需要 foreach
(Get-Content .\t.txt) -replace '^51','MADE' -replace '^59','CLME'|
Set-Content .\t.txt