Powershell 2:如何从 ASCII 文本主体中去除特定字符

Powershell 2:如何从 ASCII 文本主体中去除特定字符

我正在尝试使用 PowerShell 从字符串中去除奇数字符。我使用以下输出尝试自学:

get-help about_regular_expressions

我正在尝试获取一个主要为 ASCII 的字符串,但该字符串中有一个需要删除的异常字符。(注册商标符号;带圆圈的 R。)我想从字符串中删除该字符的任何出现,而保留其他所有内容。使用 PowerShell 2.0 实现此目的的最简洁表达式是什么?

[编辑]

我做了进一步的挖掘,我相信问题源于我正在使用的 Import-CSV 调用。

当我从记事本中剪切并粘贴此符号到 PS 提示符中,并将其分配给一个字符串时,匹配得很好:

# This code yields 'True'
$string -match "\u00ae"

但是,当我在 CSV 文件上使用 Import-CSV 时,其中一个字段包含特殊符号,我相信原始字节会以某种方式被转换,因为执行这样的操作不起作用:

# This code yields 'False'
$source = Import-CSV -path testing.csv
# The following extracts the entry / line containing the special symbol that was
# copy-and-pasted above
$culprit = $source[5].COMMITTEE_NAME
$culprit -match "\u00ae"

但是,以下方法确实有效:

# This yields True
$filedata = get-content testing.csv
$filedata[6] -match "\u00ae"

所以我想我对这一切的后续问题是:

我怎样才能通过 import-csv 调用保持字符串完整,以便对各个字段的 -match 调用仍然有效?

答案1

值得注意的是,控制台 PS 不能很好地显示 Unicode。您必须使用 ISE 才能“看到”发生了什么。请查看这个相关的SO问题一些额外的阅读材料。无论如何,如果您不需要观看脚本的实际运行,请在 PS 中使用 ® 字符。

在 ISE 中:

PS C:\Users\jscott> $string = "This string contains the ® character"
PS C:\Users\jscott> $string
This string contains the ® character

PS C:\Users\jscott> $string.Replace("®","")
This string contains the  character

PS C:\Users\jscott> $string ="This ® string ® contains ® many ® characters ®®®®"
PS C:\Users\jscott> $string
This ® string ® contains ® many ® characters ®®®®

PS C:\Users\jscott> $string.Replace("®","")
This  string  contains  many  characters 

要使用字符代码而不是文字:

PS C:\Users\jscott> $string.Replace("$([char]0x00AE)","")

根据您的问题更新:

您需要将 ASCII 文件转换为 Unicode/UTF8 才能运行它Import-Csv——我不知道您在使用这个。请大家看一下其他示例。

您可能只想通过管道传输初始 CSV 文件Get-ContentExport-Csv -Encoding Unicode对文件进行预处理,让生活变得更轻松。

相关内容