我有一个test.lua(UTF-8)文件:
function private.PostAuctionsThread(self, auctionInfo)
self:SetThreadName("SHOPPING_POST_AUCTIONS")
local auctionRecord = auctionInfo.record
local postFrame = private.frame.content.result.confirmation.post
private.frame.content.result.cancelBtn:Disable()
private.frame.content.result.postBtn:Disable()
private.frame.content.result.bidBtn:Disable()
private.frame.content.result.buyoutBtn:Disable()
postFrame.postBtn:Enable()
postFrame.closeBtn:Enable()
local undercut = (TSMAPI:GetCustomPriceValue(TSM.db.global.postUndercut, auctionRecord.itemString) or 1)
if undercut > auctionRecord.itemBuyout then
undercut = 1
end
if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
-- don't undercut ourselves
undercut = 0
end
local auctionBuyout
if auctionRecord.isFake then
auctionBuyout = TSMAPI:GetCustomPriceValue(TSM.db.global.normalPostPrice, auctionRecord.itemString) or 1000000
else
auctionBuyout = auctionRecord.buyout - (undercut * auctionRecord.stackSize)
end
我想删除/替换此模式
<tab here>if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
<tab><tab>-- don't undercut ourselves
<tab><tab>undercut = 0
<tab here>end
通过Powershell脚本:
$text ="pattern_here!"
$content = [System.IO.File]::ReadAllText(path_to\test.lua")
(Get-Content 'path_to\test.lua') -replace $test,"example" | Set-Content 'path_to\test.lua'
因此脚本可以完美地替换/删除操作,但只能在一个字符串中。
我已经尝试过: 将$ text.contains与
一起使用`r `n `t `s — Escape characters
即使PowerShell回复为“true”也不会改变任何内容
this script from StackOverflow但是它会更改每个字符串的“end”,而不仅仅是“undercut = 0”旁边的字符串
那么,我加入了什么错误?已经浪费3 H +了。是否可以使用掩码,其中第一个字符串应该是$ pattern的开头,第一个“结束”将是结束字符串?
或者我应该将所有这些字符串转换为数组? 或者......使用concat?有什么想法吗?
答案 0 :(得分:1)
一个选项:
$text =
@'
if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
-- don't undercut ourselves
undercut = 0
end
Keep this text
if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
-- don't undercut ourselves
undercut = 0
end
'@
$replace_text =
@'
if TSMAPI.Player:IsPlayer(auctionRecord.seller, true, true, true) then
-- don't undercut ourselves
undercut = 0
end
'@
$regex = "(?ms)$([regex]::Escape($replace_text))"
$text -replace $regex,"example"
正则表达式使用[regex]::Escape()
构建,使用简单复制并粘贴数据样本的文本。 (?ms)
选项使其可用于多行数据
答案 1 :(得分:0)
好吧,这有点不寻常,但我浪费了近4个半小时。 对于所有阅读此内容的人,使用(Get-Content&#39; path_to \ test.file&#39; -raw )如果您正在处理不同的内容通常的.txt文件,无所谓&#34; filetype&#34;或&#34; charset&#34;。