在powershell中替换“智能引号”

时间:2011-08-06 16:54:05

标签: unicode powershell

我发现自己有点难过一个简单的问题。我试图从一堆文本文件中删除花哨的引用。我有以下脚本,我正在尝试一些不同的替换方法,但没有结果。

以下是从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"

这有什么作用?

4 个答案:

答案 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字符,所以这个简单的替换工作:

将UTF8报价替换为标准单引号

$ cq = $ cq -replace“[^ \ x00- \ x7F] +”,“'”

相关问题