Powershell 2: Como remover um caractere específico de um corpo de texto ASCII

5

Estou tentando remover caracteres estranhos de strings usando o PowerShell. Eu usei a seguinte saída para tentar aprender sozinho:

get-help about_regular_expressions

Eu estou tentando pegar uma string que é principalmente ASCII, mas que tem um caractere anômalo que precisa ser removido. (O símbolo de marca registrada; o R com um círculo ao redor.) Eu gostaria de remover qualquer ocorrência desse caractere de uma string, deixando todo o resto intacto. Qual é a expressão mais limpa para conseguir isso usando o PowerShell 2.0?

[EDITAR]

Fiz um pouco mais de escavação e acredito que o problema está na chamada do Import-CSV que estou usando.

Quando eu copio e colo esse símbolo de dentro do bloco de notas no prompt do PS e o atribuo a uma string, eu soo bem:

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

No entanto, quando eu uso Import-CSV em um arquivo CSV onde um dos campos contém o símbolo especial, acredito que os bytes brutos estão sendo convertidos, porque fazer algo assim não funciona:

# 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"

No entanto, o seguinte funciona:

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

Então, acho que minha pergunta para tudo isso é:

Como posso manter as sequências intactas por meio da chamada import-csv para que as chamadas para -match dos campos individuais ainda funcionem?

    
por Larold 21.09.2011 / 02:02

1 resposta

1

É importante observar que o console PS não exibe bem o Unicode. Você terá que usar o ISE para "ver" o que está acontecendo. Ter um olhar para este relacionados para questionar para alguma leitura adicional. Você pode usar o caractere ® no PS, independentemente de você não precisar assistir ao script em ação.

No 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 

Para usar o código de caracteres em vez do literal:

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

Por sua atualização de pergunta:

Você precisa converter o arquivo ASCII para Unicode / UTF8 antes de executá-lo através de Import-Csv - não sabia que você estava usando isso. Têm todos olhar para este e isso para outros exemplos.

Você pode querer apenas enviar o arquivo CSV inicial pensando em Get-Content ou Export-Csv -Encoding Unicode para pré-processar o arquivo e facilitar a vida.

    
por 21.09.2011 / 02:16