我有一个文本文件,有23718行文本
带BOM的UTF-16LE(Unicode)
编码。我在批处理文件中使用PowerShell CLI来查找和替换某些文本。
这是我使用的代码:
powershell -NoProfile -Command ^
"Write-Host modifying InventoryItemTypes.GER...;" ^
"$file = '%target%\InventoryItemTypes.GER';" ^
"$content = (Get-Content -Raw -Encoding UTF8 $file);" ^
"$content -Replace '(?m)(Weapon_AssaultRifle_.*_DisplayName)=\b(?!<color:.*>.*<\/color>\b)(.+)$', '$1=<color:R=1 G=1 B=0>$2</color>' |" ^
"Set-Content -Encoding Unicode -NoNewLine $file"
我的问题是,该命令替换了字符串,但将
</color>
每次更换都要更换一条新线。每个替换行的结果如下:
InventoryItemTypes_Weapon_AssaultRifle_ATAC_DisplayName=<color:R=1 G=1 B=0>ATAC 424
</color>
我不知道为什么会发生这种情况。使用我在regex101上的正则表达式定义,它应该替换文本,而不放置
</颜色>
在一条新的线上。
这是我想替换的文本片段:
...
InventoryItemTypes_Weapon_AssaultRifle_STAR_Slot3_Valentines_Leased_CreatorName=Amorous Marketplace
InventoryItemTypes_Weapon_AssaultRifle_STAR_Slot3_Valentines_Leased_DisplayName=<color:R=1 G=0.45 B=1>STAR 556 'Love-Gun'</color>
InventoryItemTypes_Weapon_AssaultRifle_Star-LCR_PR1_Joker_CreatorName=Joker Distribution
InventoryItemTypes_Weapon_AssaultRifle_Star-LCR_PR1_Joker_DisplayName=STAR 556 'LCR' PR1
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_DisplayName=VAS-R2_Base
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_Joker_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_Joker_DisplayName=VAS-R2 'Sword'
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_Slot3_Armas_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_Slot3_Armas_DisplayName=VAS-R2 'Sword' NFCP 3
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_Slot3_Joker_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Base_Slot3_Joker_DisplayName=VAS-R2 'Sword' JT3
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Sights_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Sights_DisplayName=VAS-R2_Sights
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Sights_Slot3_Armas_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Sights_Slot3_Armas_DisplayName=VAS-R2 'Scepter' NFCP 3
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Silenced_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Silenced_DisplayName=VAS-R2_Silenced
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Silenced_Slot3_Armas_CreatorName=Agrotech
InventoryItemTypes_Weapon_AssaultRifle_VAS-R2-Silenced_Slot3_Armas_DisplayName=VAS-R2 'Crown' NFCP 3
InventoryItemTypes_Weapon_AssaultRifle_Vespa_CreatorName=
InventoryItemTypes_Weapon_AssaultRifle_Vespa_DisplayName=Vespa
InventoryItemTypes_Weapon_AssaultRifle_VespaStock_CreatorName=
InventoryItemTypes_Weapon_AssaultRifle_VespaStock_DisplayName=Vespa Stock
InventoryItemTypes_Weapon_AssaultRifle_VespaTactical_CreatorName=
InventoryItemTypes_Weapon_AssaultRifle_VespaTactical_DisplayName=Vespa Tactical
InventoryItemTypes_Weapon_MattTest_CreatorName=
InventoryItemTypes_Weapon_MattTest_DisplayName=
...
我想添加
<color:R=1 G=1 B=0>
和
</颜色>
包含的所有行
Weapon_AssaultRifle_.*_Displayname=
并且还没有像代码片段的第二行那样指定颜色代码。
例子:
更改
InventoryItemTypes_Weapon_AssaultRifle_Star-LCR_PR1_Joker_DisplayName=STAR 556 'LCR' PR1
到
InventoryItemTypes_Weapon_AssaultRifle_Star-LCR_PR1_Joker_DisplayName=<color:R=1 B=1 B=0>STAR 556 'LCR' PR1</color>
并保持
InventoryItemTypes_Weapon_AssaultRifle_STAR_Slot3_Valentines_Leased_DisplayName=<color:R=1 G=0.45 B=1>STAR 556 'Love-Gun'</color>
和
InventoryItemTypes_Weapon_MattTest_DisplayName=
事实上。