Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将换行格式从Mac转换为Windows_Windows_Macos_Formatting_Newline_Utility - Fatal编程技术网

将换行格式从Mac转换为Windows

将换行格式从Mac转换为Windows,windows,macos,formatting,newline,utility,Windows,Macos,Formatting,Newline,Utility,我需要一个转换实用程序/脚本,可以将Mac上生成的.sql转储文件转换为Windows上可读的文件。这是我的问题的延续。问题似乎在于文本文件中的换行格式,但我找不到进行转换的工具…您可能需要: 您可以在DOS/Windows计算机上使用运行unix2dos,也可以在Mac上使用运行unix2dos。Windows使用回车符+换行符: \r\n \n Unix仅对换行符使用换行符: \r\n \n 总之,只需将每次出现的\n替换为\r\n 默认情况下,unix2dos和dos2unix在M

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

您可能需要:


您可以在DOS/Windows计算机上使用运行unix2dos,也可以在Mac上使用运行unix2dos。

Windows使用
回车符
+
换行符

\r\n
\n
Unix仅对换行符使用
换行符

\r\n
\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
代码段来自:

这是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
delete:

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

您可以使用

然后你可以这样做:

unix2dos file-to-convert
您还可以将dos文件转换为unix:

dos2unix file-to-convert

这里有一个非常简单的方法,对我很有效,礼貌:


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

在Yosemite OSX上,使用以下命令:

sed -e 's/^M$//' -i '' filename
其中,
^M
序列是通过按Ctrl+V然后回车来实现的

  • 使用自制软件安装dos2unix
  • 运行
    find./-typef-execdos2unix{}
    递归转换当前文件夹中的所有行尾

  • 扩展Anne和Joseph的答案,在一个简短的perl脚本中使用perl,因为我太懒了,每次都无法键入perl单行程序。
    创建一个名为“unix2dos.pl”的文件,并将其放在路径中的一个目录中。编辑文件以包含以下两行:

    #!/usr/bin/perl -wpi
    s/\n|\r\n/\r\n/g;
    
    假设“which perl”在系统上返回“/usr/bin/perl”。 使文件可执行(chmodu+xunix2dos.pl)

    示例:
    $echo“你好”>xxx
    $od-c xxx(检查文件是否以nl结尾)
    0000000 HE l o\n

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

    0000000 HE l o\r\n

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

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

    vim hello.txt以下是基于上述答案以及健全性检查的完整脚本,适用于Mac OS X,也适用于其他Linux/Unix系统(尽管尚未测试)

    #/bin/bash
    # http://stackoverflow.com/questions/6373888/converting-newline-formatting-from-mac-to-windows
    # =============================================================================
    # =
    #=ECJB提供的FIXTEXT.SH
    # =
    #=用法:脚本[模式]文件名
    # =
    #=模式是unix2dos、dos2unix、tounix、todos、tomac中的一种
    #=文件名已就地修改
    #=如果脚本是模式之一(带或不带.sh扩展名),则为模式
    #=可以省略-从脚本名称推断。
    #=脚本使用file命令来测试它是否为文本文件,
    #但这不是保证。
    # =
    # =============================================================================
    清楚的
    script=“$0”
    modes=“unix2dos dos2 unix todos tounix tounix tomac”
    用法(){
    echo“用法:$script[mode]filename”
    回声
    “回声”模式是下列模式之一:
    echo$模式
    echo“注意:tomac模式适用于旧的Mac OS版本,不应使用”
    echo“无正当理由使用”
    回声
    echo“文件已修改到位,因此没有输出文件名。”
    echo“使用风险自负。”
    回声
    echo“脚本确实尝试检查它是否是二进制文件或文本文件,以确保其完整性,但是”
    echo“这不是保证。”
    回声
    echo“指向此脚本的符号链接可能使用上述名称并被识别为”
    回显“模式运算符”
    回声
    echo“按回车键退出”
    阅读答案
    出口
    }
    #--查找模式作为脚本名
    mode=“`basename”$0.sh`”
    fname=“$1”
    #--如果两个参数用作模式和文件名
    如果[!-z“$2”];然后模式=“$1”;fname=“$2”;fi
    #--检查是否有1或2个参数或打印用法。
    如果[!-z“$3”-o-z“$1”];然后使用;fi
    #--检查找到的模式是否有效。
    validmode=否
    对于$modes中的checkmode;如果[$mode=$checkmode],则执行此操作;那么validmode=yes;fi;完成
    #--如果不是有效模式,则中止。
    如果[$validmode=no];然后回显无效模式$mode…正在中止。;回声;用法;fi
    #--如果文件不存在,则中止。
    如果[!-e“$fname”];然后回显输入文件$fname不存在…正在中止。;回声;用法;fi
    #--如果操作系统认为它是二进制文件,则中止,显示文件信息。
    如果[-z”`file“$fname”| grep text`];然后echo输入文件$fname可能是二进制文件…正在中止。;回声;文件“$fname”;回声;用法;fi
    #--进行就地转换。
    中的大小写“$mode”
    #unix2dos)#sed在Mac上不起作用-替换为w/“todos”和“tounix”
    ##此外,这些变体更通用,假设更少。
    #sed-e's/$/\r/'-i''“$fname”#UNIX到DOS(添加CRs)
    #       ;;
    #dos2unix)
    #sed-e's/\r$/'-i''“$fname”#DOS到UNIX(删除CRs)
    #           ;;
    “unix2dos”|“todos”)
    perl-pi-e的/\r\n |\n |\r/\r\n/g'$fname'#转换为DOS
    ;;
    “dos2unix”|“tounix”)
    perl-pi-e的/\r\n |\n |\r/\n/g'$fname'#转换为UNIX
    ;;
    “托马克”)
    perl-pi-e的/\r\n |\n |\r/\r/g“$fname”#转换为旧Mac
    ;;
    *)#——由于先检查模式,因此不严格需要。
    回送无效模式$mode…正在中止。;回声;使用
    ;;
    以撒
    #--显示结果。
    如果[“$?”=“0”];然后回显“文件$fname更新为模式$mode。”;else-echo“转换f
    
    vim hello.txt <<EOF
    :set fileformat=dos
    :wq
    EOF