将换行格式从Mac转换为Windows
我需要一个转换实用程序/脚本,可以将Mac上生成的.sql转储文件转换为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
您可以在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\nvim
还可以将文件从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