将换行格式从Mac转换为Windows

| 我需要一个转换实用程序/脚本,它将Mac上生成的.sql转储文件转换为Windows上可读的文件。这是我在这里遇到的问题的延续。问题似乎与文本文件中的换行符格式有关,但我找不到进行转换的工具...     
已邀请:
        Windows将
carriage return
+
line feed
用于换行符:
\\r\\n
Unix仅将line3ѭ用于换行符:
\\n
总之,只需将每次出现的“ 5”替换为“ 6”即可。 OS7 default和
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 \'s Answer的改进版本-如果使用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
    
        您可以使用Homebrew安装unix2dos
brew install unix2dos
然后,您可以执行以下操作:
unix2dos file-to-convert
您也可以将Dos文件转换为Unix:
dos2unix file-to-convert
    
        您可能需要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计算机上运行ѭ7,也可以在Mac上使用MacPorts运行ѭ7。     
        只需删除
tr
tr -d \"\\r\" <infile.txt >outfile.txt
    
         使用自制软件安装dos2unix 运行ѭ20递归转换当前文件夹中的所有行尾     
        
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
    
        这是一种非常简单的方法,由Davy Schmeits的Weblog提供,对我来说很有效:
cat foo | col -b > foo2
其中foo是该行末尾具有Control + M字符的文件,而foo2是您要创建的新文件。     
        在优胜美地OSX上,使用以下命令:
sed -e \'s/^M$//\' -i \'\' filename
其中按Ctrl + V然后按Enter即可实现“ 26”序列。     
        在简短的perl脚本中使用perl扩展了Anne和JosephH的答案,因为我太懒了以至于无法立即输入perl-one-liner。 创建一个文件,例如\“ unix2dos.pl \”,并将其放在路径中的目录中。编辑文件以包含两行:
#!/usr/bin/perl -wpi
s/\\n|\\r\\n/\\r\\n/g;
假设\“哪个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     
        在左面板的Xcode 9中,在项目导航器中打开/选择文件。如果文件不存在,则将其拖放到项目导航器中。 在右侧面板上找到“文本设置”,然后将“行尾”更改为Windows(CRLF)。 XCode屏幕转储     

要回复问题请先登录注册