web-dev-qa-db-fra.com

Conversion du format de nouvelle ligne de Mac à Windows

J'ai besoin d'un script/utilitaire de conversion permettant de convertir un fichier de vidage .sql généré sur Mac en un fichier lisible sous Windows. C’est la continuation d’un problème que j’avais ici . Le problème semble être lié au formatage à la nouvelle ligne dans les fichiers texte, mais je ne trouve pas d'outil pour effectuer la conversion ...

115
Yarin

Windows utilise carriage return + line feed pour la nouvelle ligne:

\r\n

Unix utilise uniquement Line feed pour la nouvelle ligne:

\n

En conclusion, remplacez simplement chaque occurrence de \n par \r\n.
unix2dos et dos2unix ne sont pas disponibles par défaut sur Mac OSX.
Heureusement, vous pouvez simplement utiliser Perl ou sed pour faire le travail:

sed -e 's/$/\r/' inputfile > outputfile                # UNIX to DOS  (adding CRs)
sed -e 's/\r$//' inputfile > outputfile                # DOS  to UNIX (removing CRs)
Perl -pe 's/\r\n|\n|\r/\r\n/g' inputfile > outputfile  # Convert to DOS
Perl -pe 's/\r\n|\n|\r/\n/g'   inputfile > outputfile  # Convert to UNIX
Perl -pe 's/\r\n|\n|\r/\r/g'   inputfile > outputfile  # Convert to old Mac

Extrait de code de:
http://en.wikipedia.org/wiki/Newline#Conversion_utilities

121
Anne

Anne est une version améliorée de la réponse d'Anne. Si vous utilisez Perl, vous pouvez modifier le fichier 'in-situ' plutôt que de générer un nouveau fichier:

Perl -pi -e 's/\r\n|\n|\r/\r\n/g' file-to-convert  # Convert to DOS
Perl -pi -e 's/\r\n|\n|\r/\n/g'   file-to-convert  # Convert to UNIX
118
JosephH

Vous pouvez installer unix2dos avec Homebrew

brew install unix2dos

Ensuite, vous pouvez faire ceci:

unix2dos file-to-convert

Vous pouvez également convertir des fichiers dos en unix:

dos2unix file-to-convert
99
Steven Hirlston

Vous voulez probablement unix2dos :

$ man unix2dos

NAME
       dos2unix - DOS/MAC to UNIX and vice versa text file format converter

SYNOPSIS
           dos2unix [options] [-c CONVMODE] [-o FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [-c CONVMODE] [-o FILE ...] [-n INFILE OUTFILE ...]

DESCRIPTION
       The Dos2unix package includes utilities "dos2unix" and "unix2dos" to convert plain text files in DOS or MAC format to UNIX format and vice versa.  Binary files and non-
       regular files, such as soft links, are automatically skipped, unless conversion is forced.

       Dos2unix has a few conversion modes similar to dos2unix under SunOS/Solaris.

       In DOS/Windows text files line endings exist out of a combination of two characters: a Carriage Return (CR) followed by a Line Feed (LF).  In Unix text files line
       endings exists out of a single Newline character which is equal to a DOS Line Feed (LF) character.  In Mac text files, prior to Mac OS X, line endings exist out of a
       single Carriage Return character. Mac OS X is Unix based and has the same line endings as Unix.

Vous pouvez exécuter unix2dos sur votre ordinateur DOS/Windows en utilisant cygwin ou sur votre Mac en utilisant MacPorts .

15
Paul R

Il suffit de faire tr supprimer:

tr -d "\r" <infile.txt >outfile.txt
13
parahren
  1. Installer dos2unix avec homebrew
  2. Exécutez 'find ./ -type f -exec dos2unix {} \;' convertir récursivement toutes les fins de ligne dans le dossier en cours
3
AAverin

vim peut également convertir des fichiers du format UNIX au format DOS. Par exemple:

vim hello.txt <<EOF
:set fileformat=dos
:wq
EOF
2
Stephen Quan

Ce qui suit est un script complet basé sur les réponses ci-dessus ainsi que sur la vérification de l'intégrité et fonctionne sur Mac OS X. Il devrait également fonctionner sur d'autres systèmes Linux/Unix (bien que cela n'ait pas été testé).

#!/bin/bash

# http://stackoverflow.com/questions/6373888/converting-newline-formatting-from-mac-to-windows

# =============================================================================
# =
# = FIXTEXT.SH by ECJB
# =
# = USAGE:  SCRIPT [ MODE ] FILENAME
# =
# = MODE is one of unix2dos, dos2unix, tounix, todos, tomac
# = FILENAME is modified in-place
# = If SCRIPT is one of the modes (with or without .sh extension), then MODE
# =   can be omitted - it is inferred from the script name.
# = The script does use the file command to test if it is a text file or not,
# =   but this is not a guarantee.
# =
# =============================================================================

clear
script="$0"
modes="unix2dos dos2unix todos tounix tomac"

usage() {
    echo "USAGE:  $script [ mode ] filename"
    echo
    echo "MODE is one of:"
    echo $modes
    echo "NOTE:  The tomac mode is intended for old Mac OS versions and should not be"
    echo "used without good reason."
    echo
    echo "The file is modified in-place so there is no output filename."
    echo "USE AT YOUR OWN RISK."
    echo
    echo "The script does try to check if it's a binary or text file for sanity, but"
    echo "this is not guaranteed."
    echo
    echo "Symbolic links to this script may use the above names and be recognized as"
    echo "mode operators."
    echo
    echo "Press RETURN to exit."
    read answer
    exit
}

# -- Look for the mode as the scriptname
mode="`basename "$0" .sh`"
fname="$1"

# -- If 2 arguments use as mode and filename
if [ ! -z "$2" ] ; then mode="$1"; fname="$2"; fi

# -- Check there are 1 or 2 arguments or print usage.
if [ ! -z "$3" -o -z "$1" ] ; then usage; fi

# -- Check if the mode found is valid.
validmode=no
for checkmode in $modes; do if [ $mode = $checkmode ] ; then validmode=yes; fi; done
# -- If not a valid mode, abort.
if [ $validmode = no ] ; then echo Invalid mode $mode...aborting.; echo; usage; fi

# -- If the file doesn't exist, abort.
if [ ! -e "$fname" ] ; then echo Input file $fname does not exist...aborting.; echo; usage; fi

# -- If the OS thinks it's a binary file, abort, displaying file information.
if [ -z "`file "$fname" | grep text`" ] ; then echo Input file $fname may be a binary file...aborting.; echo; file "$fname"; echo; usage; fi

# -- Do the in-place conversion.
case "$mode" in
#   unix2dos ) # sed does not behave on Mac - replace w/ "todos" and "tounix"
#       # Plus, these variants are more universal and assume less.
#       sed -e 's/$/\r/' -i '' "$fname"             # UNIX to DOS  (adding CRs)
#       ;;
#   dos2unix )
#       sed -e 's/\r$//' -i '' "$fname"             # DOS  to UNIX (removing CRs)
#           ;;
    "unix2dos" | "todos" )
        Perl -pi -e 's/\r\n|\n|\r/\r\n/g' "$fname"  # Convert to DOS
        ;;
    "dos2unix" | "tounix" )
        Perl -pi -e 's/\r\n|\n|\r/\n/g'   "$fname"  # Convert to UNIX
        ;;
    "tomac" )
        Perl -pi -e 's/\r\n|\n|\r/\r/g'   "$fname"  # Convert to old Mac
        ;;
    * ) # -- Not strictly needed since mode is checked first.
        echo Invalid mode $mode...aborting.; echo; usage
        ;;
esac

# -- Display result.
if [ "$?" = "0" ] ; then echo "File $fname updated with mode $mode."; else echo "Conversion failed return code $?."; echo; usage; fi
1
ECJB

Sous Yosemite OSX, utilisez cette commande:

sed -e 's/^M$//' -i '' filename

où la séquence ^M est obtenue en appuyant sur Ctrl+V puis Enter.

1
Olga

Dans Xcode 9, dans le panneau de gauche, ouvrez/choisissez votre fichier dans navigateur de projet. Si le fichier n’est pas présent, drogue-et-déposez-le dans le navigateur du projet

Dans le panneau de droite, recherchez Paramètres du texte et remplacez Terminaisons par Windows (CRLF).

XCode screendump  screendump from XCode  

0
matrix3003

Voici une approche très simple, qui a bien fonctionné pour moi, courtoisie Weblog de Davy Schmeits

cat foo | col -b > foo2

Où foo est le fichier contenant les caractères Ctrl + M en fin de ligne et foo2 le nouveau fichier que vous créez.

0
patdevelop

Développez les réponses d'Anne et JosephH, en utilisant Perl dans un court script Perl, car je suis trop paresseux pour taper Perl-one-liner très rapidement.
Créez un fichier, nommé par exemple "unix2dos.pl" et placez-le dans un répertoire de votre chemin. Editez le fichier pour qu'il contienne les 2 lignes:

#!/usr/bin/Perl -wpi
s/\n|\r\n/\r\n/g;

En supposant que "quel Perl" retourne "/ usr/bin/Perl" sur votre système . Rendre le fichier exécutable (chmod u + x unix2dos.pl).

Exemple:
$ echo "hello"> xxx
$ od -c xxx (vérifier que le fichier se termine par un nl)
0000000 h e l l o n 

$ unix2dos.pl xxx
$ od -c xxx (en vérifiant qu'il se termine maintenant dans cr lf)
0000000 h e l l o\r\n 

0
avy