web-dev-qa-db-ja.com

改行フォーマットをMacからWindowsに変換する

Macで生成された.sqlダンプファイルをWindowsで読み取り可能なものに変換する変換ユーティリティ/スクリプトが必要です。これは、私が抱えていた問題の続きです here 。問題はテキストファイルの改行フォーマットにあるようですが、変換を行うツールが見つかりません...

123
Yarin

Windowsは、改行にcarriage return + line feedを使用します。

\r\n

Unixは、改行にLine feedのみを使用します。

\n

結論として、\nのすべての出現を\r\nに置き換えるだけです。
unix2dosdos2unixは、Mac OSXではデフォルトで使用できません。
幸いなことに、単にPerlまたはsedを使用してジョブを実行できます。

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

コードスニペット:
http://en.wikipedia.org/wiki/Newline#Conversion_utilities

126
Anne

これは、Anneの答えの改良版です。Perlを使用している場合、新しいファイルを生成するのではなく、「in-place」ファイルを編集できます。

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
121
JosephH

Homebrew でunix2dosをインストールできます

brew install unix2dos

次に、これを行うことができます:

unix2dos file-to-convert

Dosファイルをunixに変換することもできます。

dos2unix file-to-convert
102
Steven Hirlston

おそらく nix2dos

$ 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.

cygwin を使用してDOS/Windowsマシンでunix2dosを実行するか、または MacPorts を使用してMacで実行できます。

16
Paul R

tr deleteを実行するだけです:

tr -d "\r" <infile.txt >outfile.txt
13
parahren
  1. Homebrewでdos2unixをインストールする
  2. find ./ -type f -exec dos2unix {} \;を実行して、現在のフォルダー内のすべての行末を再帰的に変換します
4
AAverin

vimは、UNIXからDOS形式にファイルを変換することもできます。例えば:

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

以下は、上記の回答と健全性チェックに基づく完全なスクリプトであり、Mac OS Xで動作し、他のLinux/Unixシステムでも動作するはずです(ただし、これはテストされていません)。

#!/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
2
ECJB

Yosemite OSXでは、次のコマンドを使用します。

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

ここで、^Mシーケンスは、 Ctrl+V それから Enter

1
Olga

左側のパネルのXcode 9で、project navigatorでファイルを開く/選択します。ファイルが存在しない場合は、ドラッグアンドドロップしてprojectナビゲーターにドロップします。

右側のパネルでText Settingsを見つけ、Line EndingsWindows(CRLF)

XCodeスクリーンダンプ screendump from XCode

0
matrix3003

これは本当に簡単なアプローチで、私にとってはうまくいきました。礼儀 Davy Schmeits's Weblog

cat foo | col -b > foo2

ここで、fooは行末にControl + M文字を含むファイルで、foo2は作成中の新しいファイルです。

0
patdevelop

短いPerlスクリプトでPerlを使用して、AnneとJosephHの答えを広げます。私はあまりにも面倒なので、Perlのワンライナーを入力するのは非常に困難です。
「unix2dos.pl」などの名前のファイルを作成し、パス内のディレクトリに配置します。 2行を含むようにファイルを編集します。

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

システム上で「which Perl」が「/ usr/bin/Perl」を返すと仮定します。ファイルを実行可能にします(chmod u + x unix2dos.pl)。

例:
$ echo "hello"> xxx
$ od -c xxx(ファイルがnlで終わることを確認します)
0000000 h e l l o\n

$ unix2dos.pl xxx
$ od -c xxx(cr lfで終了することを確認)
0000000 h e l l o\r\n

0
avy