Powershell:多次替换和删除
Powershell: Multiple replace and delete
我需要有关此脚本的帮助。我已经慢慢走到这一步了,但此时需要帮助。
我需要一个脚本,可以将文本从一个部分的末尾移动到文件中的某个位置,然后删除移动的文本。要移动的文本有标记,位置也有标记。我需要能够在移动后删除文本。也需要对同一目录下的多个txt文件做。
例如:
Sample Input .txt
A;1;1;####; (#### is the location (1) marker)
B
B
B
====-1234 (==== is the find (1) marker)
A;1;1;####; (#### is the location (2) marker)
B
B
B
====-5678 (==== is the find (2) marker)
After processing
A;1;1;1234;
B
B
B
A;1;1;5678;
B
B
B
文本文件可以像这样有多个分组。需要从上到下为每个分组执行此操作。这是我目前所拥有的,它只是移动文本而不是删除。
$file = "C:\Users\NX07934\Documents\Projects045\Docs\SampleData\*.txt"
$old = "\####"
$find = Get-ChildItem $file -recurse| Select-String -pattern "====-*"
$split = $find.ToString().Split("-")
$new = $split[1]
get-childitem "C:\Dir" -recurse -include *.txt |
select -expand fullname |
foreach
{
(Get-Content $_) -replace $old,$new |
Set-Content $_
}
感谢所有帮助!
有什么帮助吗?
$text =
@'
A;1;1;####;
B
B
B
====-1234
A;1;1;####;
B
B
B
====-5678
'@
$regex =
@'
(?ms)(.+?####;
.+?)
====-(\d+)
'@
([regex]::matches($text,$regex) |
foreach {
$_.groups[1].value -replace '####',($_.groups[2].value)
}) -join ''
A;1;1;1234;
B
B
B
A;1;1;5678;
B
B
B
编辑:- 将其应用于文件集合:
$regex =
@'
(?ms)(.+?####;
.+?)
====-(\d+)
'@
Get-Childitem -Path C:\somedir -Filter *.txt |
foreach {
$Text = Get-Content $_ -Raw
([regex]::matches($text,$regex) |
foreach {
$_.groups[1].value -replace '####',($_.groups[2].value)
}) -join '' |
Set-Content $_.FullName
}
我需要有关此脚本的帮助。我已经慢慢走到这一步了,但此时需要帮助。
我需要一个脚本,可以将文本从一个部分的末尾移动到文件中的某个位置,然后删除移动的文本。要移动的文本有标记,位置也有标记。我需要能够在移动后删除文本。也需要对同一目录下的多个txt文件做。
例如:
Sample Input .txt
A;1;1;####; (#### is the location (1) marker)
B
B
B
====-1234 (==== is the find (1) marker)
A;1;1;####; (#### is the location (2) marker)
B
B
B
====-5678 (==== is the find (2) marker)
After processing
A;1;1;1234;
B
B
B
A;1;1;5678;
B
B
B
文本文件可以像这样有多个分组。需要从上到下为每个分组执行此操作。这是我目前所拥有的,它只是移动文本而不是删除。
$file = "C:\Users\NX07934\Documents\Projects045\Docs\SampleData\*.txt"
$old = "\####"
$find = Get-ChildItem $file -recurse| Select-String -pattern "====-*"
$split = $find.ToString().Split("-")
$new = $split[1]
get-childitem "C:\Dir" -recurse -include *.txt |
select -expand fullname |
foreach
{
(Get-Content $_) -replace $old,$new |
Set-Content $_
}
感谢所有帮助!
有什么帮助吗?
$text =
@'
A;1;1;####;
B
B
B
====-1234
A;1;1;####;
B
B
B
====-5678
'@
$regex =
@'
(?ms)(.+?####;
.+?)
====-(\d+)
'@
([regex]::matches($text,$regex) |
foreach {
$_.groups[1].value -replace '####',($_.groups[2].value)
}) -join ''
A;1;1;1234;
B
B
B
A;1;1;5678;
B
B
B
编辑:- 将其应用于文件集合:
$regex =
@'
(?ms)(.+?####;
.+?)
====-(\d+)
'@
Get-Childitem -Path C:\somedir -Filter *.txt |
foreach {
$Text = Get-Content $_ -Raw
([regex]::matches($text,$regex) |
foreach {
$_.groups[1].value -replace '####',($_.groups[2].value)
}) -join '' |
Set-Content $_.FullName
}