Macで生成された.sqlダンプファイルをWindowsで読み取り可能なものに変換する変換ユーティリティ/スクリプトが必要です。これは、私が抱えていた問題の続きです here 。問題はテキストファイルの改行フォーマットにあるようですが、変換を行うツールが見つかりません...
Windowsは、改行にcarriage return
+ line feed
を使用します。
\r\n
Unixは、改行にLine feed
のみを使用します。
\n
結論として、\n
のすべての出現を\r\n
に置き換えるだけです。unix2dos
とdos2unix
は、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
これは、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
Homebrew でunix2dosをインストールできます
brew install unix2dos
次に、これを行うことができます:
unix2dos file-to-convert
Dosファイルをunixに変換することもできます。
dos2unix file-to-convert
おそらく 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で実行できます。
tr
deleteを実行するだけです:
tr -d "\r" <infile.txt >outfile.txt
find ./ -type f -exec dos2unix {} \;
を実行して、現在のフォルダー内のすべての行末を再帰的に変換しますvim
は、UNIXからDOS形式にファイルを変換することもできます。例えば:
vim hello.txt <<EOF
:set fileformat=dos
:wq
EOF
以下は、上記の回答と健全性チェックに基づく完全なスクリプトであり、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
Yosemite OSXでは、次のコマンドを使用します。
sed -e 's/^M$//' -i '' filename
ここで、^M
シーケンスは、 Ctrl+V それから Enter。
これは本当に簡単なアプローチで、私にとってはうまくいきました。礼儀 Davy Schmeits's Weblog :
cat foo | col -b > foo2
ここで、fooは行末にControl + M文字を含むファイルで、foo2は作成中の新しいファイルです。
短い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