将换行格式从 Mac 转换为 Windows

我需要一个转换实用程序/脚本,将转换一个。将 Mac 上生成的 sql 转储文件转储为 Windows 上的一个可读文件。这是我的 给你问题的延续。问题似乎与文本文件中的换行格式有关,但我找不到一个工具来进行转换..。

197629 次浏览

你可能想要 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.

您可以使用 Cygwin在 DOS/Windows 机器上运行 unix2dos,也可以使用 MacPorts在 Mac 机器上运行 unix2dos

Windows 使用 carriage return + line feed表示换行符:

\r\n

Unix 只在换行中使用 Line feed:

\n

总之,简单地用 \r\n代替 \n的每一次发生。
默认情况下,Mac OSX 上不提供 unix2dosdos2unix
幸运的是,您可以简单地使用 Perlsed来完成这项工作:

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,您可以对文件进行编辑,而不是生成一个新文件:

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

只要做 tr删除:

tr -d "\r" <infile.txt >outfile.txt

可以使用 自酿的安装 unix2dos

brew install unix2dos

然后你可以这样做:

unix2dos file-to-convert

你也可以把 dos 文件转换成 unix:

dos2unix file-to-convert

这里有一个非常简单的方法,对我来说很管用:

cat foo | col -b > foo2

其中 foo 是在行尾有 Control + M 字符的文件,foo2是您正在创建的新文件。

在 Yosemite OSX,使用以下命令:

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

其中 ^M序列是通过按 Ctrl + V然后按 Enter来实现的。

  1. 用自制程序安装 dos2unix
  2. 运行 find ./ -type f -exec dos2unix {} \;以递归地转换当前文件夹中的所有行结束符

扩展 Anne 和 JosephH 的答案,在一个简短的 perl 脚本中使用 perl,因为我太懒了,没有时间键入 perl-one-liner。
创建一个名为“ unix2dos.pl”的文件,并将其放在路径中的目录中。编辑文件以包含以下两行:

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

假设“ which perl”在您的系统上返回“/usr/bin/perl”。 使文件可执行(chmod u + x unix2dos.pl)。

例如:
$回声“你好”> xxx
$od-c xxx (检查文件是否以 nl 结尾)
000000英镑

$unix2dos.pl xxx
$od-c xxx (检查它现在以 cr lf 结尾)
000000英尺

vim还可以将文件从 UNIX 转换为 DOS 格式,例如:

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

相反,如果您需要从 DOS 转换到 UNIX:

vim hello.txt <<EOF
:set fileformat=unix
: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

在左边面板的 Xcode 9中打开/选择 项目导航员中的文件。如果文件不在那里,药物和下降到 项目导航员

在右侧面板上找到 文本设置并将 线路终点站改为 视窗(CRLF)

XCode Screendump< img src = “ https://i.stack.imgur.com/lqJpF.png”alt = “ creendump from XCode”>