2017-07-11 2 views
2

J'essaie de réparer un fichier CSV qui contient un ,\r\n de fin. Peu importe ce que je fais, ça ne fait rien. J'ai essayé de mettre l'expression dans [] qui le fait remplacer chaque virgule. Cela implique que le problème est qu'il ne peut pas correspondre au caractère de retour à la ligne.Remplacement de `, r n` dans PowerShell

J'ai enregistré le fichier avec les fins de ligne Windows en utilisant Sublime Text, et j'ai essayé les deux variantes de \r\n, \n\r, et seulement \n.

(Get-Content file.txt) | ForEach-Object { $_ -replace '\,\r\n', [System.Environmen 
t]::NewLine } | Set-Content file2.txt 

J'utilise la version PowerShell 5.1.15063.413

+2

'Get-Contenu file.txt | ForEach-Object {$ _. TrimEnd (',')} | Set-Content fichier2.txt'? ou sous forme abrégée 'gc file.txt | % TrimEnd ',' | sc file2.txt' – TessellatingHeckler

Répondre

1

PowerShell se révèle être tout à fait ... spécial.

Get-Content renvoie par défaut un tableau de chaînes. Il trouve tous les nouveaux caractères de ligne et les utilise pour diviser l'entrée dans ledit tableau. Cela signifie qu'il n'y a pas de nouvelles lignes pour que l'expression rationnelle corresponde.

Une légère variation de cette commande à l'aide du paramètre -Raw a résolu mon problème.

(Get-Content file.txt -Raw).replace(",`r`n", [System.Environment]::NewLine) | Set-Content file2.txt 
+0

Pour les personnes toujours bloquées sur PowerShell v2, le paramètre '-Raw' n'est pas disponible. Au lieu de cela, ils peuvent lire le tableau et le rejouer avec '(Get-Content file.txt) -join" \ 'n" ' – TheMadTechnician