Powershell 2: Как убрать определенный символ из текста ASCII

Я пытаюсь удалить нечетные символы из строк, используя PowerShell. Я использовал следующий вывод, чтобы попытаться учиться самостоятельно:

get-help about_regular_expressions

Я пытаюсь взять строку, которая в основном ASCII, но имеет один аномальный символ, который необходимо удалить. (Зарегистрированный символ товарного знака; R с кружком вокруг него.) Я бы хотел убрать любое вхождение этого символа из строки, оставив все остальное без изменений. Какое самое чистое выражение для достижения этой цели с помощью PowerShell 2.0?

[РЕДАКТИРОВАТЬ]

Я немного покопался и считаю, что проблема заключается в вызове Import-CSV, который я использую.

Когда я вырезал и вставлял этот символ из блокнота в приглашение PS и назначал его в строку, я точно соответствовал:

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

Однако, когда я использую Import-CSV для файла 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 независимо от того, хотите ли вы наблюдать сценарий в действии.

В ИСЕ:

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-Content или же Export-Csv -Encoding Unicode предварительно обработать файл и сделать жизнь проще.

Другие вопросы по тегам