Comment créez-vous un format de fichier UNIX dans PowerShell? J'utilise les éléments suivants pour créer un fichier, mais cela le crée toujours au format Windows.
"hello world" | %{ $_.Replace("`r`n","`n") } | out-file -filepath test.txt -append
3 Réponses :
Une réponse laïenne est (en prenant une entrée de Dos.txt Sortie à UNIX.TXT):
[string]::Join( "`n", (gc dos.txt)) | sc unix.txt
Extension de votre solution, il existe en fait un moyen d'écrire les octets et évite la fin de la ligne DOS: SC UNIX.TXT ([[[] []] [Char []] "$ ContentText")
Bonne pensée, merci pour ça!
@ X0N Ceci termine également le fichier avec une ligne de gamme de style Windows (\ r \ n)
Il existe une cmdlet dans le Extensions de la communauté PowerShell appelée Converto-UnixLineending P>
J'ai trouvé cette solution:
function ConvertTo-LinuxLineEndings($path) { $oldBytes = [io.file]::ReadAllBytes($path) if (!$oldBytes.Length) { return; } [byte[]]$newBytes = @() [byte[]]::Resize([ref]$newBytes, $oldBytes.Length) $newLength = 0 for ($i = 0; $i -lt $oldBytes.Length - 1; $i++) { if (($oldBytes[$i] -eq [byte][char]"`r") -and ($oldBytes[$i + 1] -eq [byte][char]"`n")) { continue; } $newBytes[$newLength++] = $oldBytes[$i] } $newBytes[$newLength++] = $oldBytes[$oldBytes.Length - 1] [byte[]]::Resize([ref]$newBytes, $newLength) [io.file]::WriteAllBytes($path, $newBytes) }
Votre test ne fonctionne pas car il n'y a pas de crlf dans "Hello World"
@ x0n Lorsque vous l'avez écrit dans un fichier, le CR / LF est annexé à la ligne
C'est le point que j'essayais de faire. Clairement, votre opération Remplacer est avant i> le fichier écriture (out-fichier), donc si le fichier extérieur ajoute le CRLF, cela se produit après votre tentative de la remplacer.
Je sais que cela ne répond pas à votre question, mais vous pouvez vérifier s'il est abordable d'appeler Dos2unix sur la cible.