我发现自己有点难过一个简单的问题。我试图从一堆文本文件中删除花哨的引用。我有以下脚本,我正在尝试一些不同的替换方法,但没有结果。
以下是从github下载数据并尝试转换的示例。
$srcUrl="https://raw.github.com/gist/1129778/d4d899088ce7da19c12d822a711ab24e457c023f/gistfile1.txt"
$wc = New-Object net.WebClient
$wc.DownloadFile($srcUrl,"foo.txt")
$fancySingleQuotes = "[" + [string]::Join("",[char[]](0x2019, 0x2018)) + "]"
$c = Get-Content "foo.txt"
$c | % { `
$_ = $_.Replace("’","'")
$_ = $_.Replace("`“","`"")
$_.Replace("`”","`"")
} `
| Set-Content "foo2.txt"
这有什么作用?
答案 0 :(得分:5)
更新:修正了我的答案(manojlds的评论是正确的,$ _的东西是红鲱鱼)。这是一个有效的版本,我已经更新它以包含您的测试代码:
$srcUrl="https://raw.github.com/gist/1129778/d4d899088ce7da19c12d822a711ab24e457c023f/gistfile1.txt"
$wc = New-Object net.WebClient
$wc.DownloadFile($srcUrl,"C:\Users\hartez\SO6968270\foo.txt")
$fancySingleQuotes = "[\u2019\u2018]"
$fancyDoubleQuotes = "[\u201C\u201D]"
$c = Get-Content "foo.txt" -Encoding UTF8
$c | % { `
$_ = [regex]::Replace($_, $fancySingleQuotes, "'")
[regex]::Replace($_, $fancyDoubleQuotes, '"')
} `
| Set-Content "foo2.txt"
manojlds版本不适合你的原因是你从github获得的文件的编码与正则表达式中的Unicode字符不兼容。以UTF-8读取它可以解决问题。
答案 1 :(得分:2)
以下对您提供的输入和输出有效:
$c = Get-Content $file
$c | % { `
$_ = $_.Replace("’","'")
$_ = $_.Replace("`“","`"")
$_.Replace("`”","`"")
} `
| Set-Content $file
答案 2 :(得分:0)
你的最后一次替换,请用左花哨的报价和单引号。那是你要的吗?它与您的样本输出不匹配。试试这个:
$_.Replace("`“","`"")
$_.Replace("`”","`"")
答案 3 :(得分:-1)
这篇文章非常接近我的需要。我正在寻找可以检查任何UTF8的东西并找到了这篇文章: Notepad++, How to remove all non ascii characters with regex? 这似乎也适用于PowerShell。
他们在PowerShell中使用的正则表达式是:
[^ \ x00- \ 0x7F部分] +
哪个会找到任何UTF8字符,如果你需要更具体,你可以磨练正则表达式。
我的输入只有卷曲引号作为UTF8字符,所以这个简单的替换工作:
$ cq = $ cq -replace“[^ \ x00- \ x7F] +”,“'”