删除CR行终止符

时间:2012-12-29 09:17:19

标签: shell unix newline dos

首先我会说我已阅读this post但我仍然遇到CR line terminators的问题。

有一个名为build_test.sh的文件,我在leafpad进行了修改,可以在Vim中显示:

cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp 
cd ~/moonbox/llvm-obj/tools/TEST_TOOL/
make
make install
cd -

然而:

  1. 使用cat build_test.sh输出
  2. 使用more build_test.sh输出:cd - install/llvm-obj/tools/TEST_TOOL/Y_TOOL/$1 test.cpp
  3. 使用less build_test.sh输出:cp ~/moonbox/llvm-2.9/lib/Transforms/MY_TOOL/$1 test.cpp^Mcd ~/moonbox/llvm-obj/tools/TEST_TOOL/^Mmake^Mmake install^Mcd -
  4. file build_test.sh的结果是:

    build_test.sh: ASCII text, with CR line terminators
    

    关注this post后,^M不再存在,但没有更多换行符:-(
    file build_test_no_cr.sh的结果现在是:

    build_test_nocr.sh: ASCII text, with no line terminators
    

    可以看到解决方案here

    但是我仍然希望cat显示任何内容,more显示如此奇怪的结果。此外,在这种情况下,为什么Vim中的dos2unixset fileformat=unix失败

    ps:我想也许我的编辑器( Vim leafpad ?)只为换行符生成\r而不是\n。怎么会这样呢?

3 个答案:

答案 0 :(得分:11)

换行符的简单\r终止符是“旧Mac”行终止符,2012年的编辑器甚至会生成带有此类行终结符的文件,这很奇怪...无论如何,您可以使用mac2unix命令,它是dos2unix发行版的一部分:

# Edits thefile inline
mac2unix thefile
# Takes origfile as an input, outputs to dstfile
mac2unix -n origfile dstfile

此命令不会使已经预期行终止符的文件变为munge,这是一个奖励。反之(unix2mac)也存在。

请注意,mac2unixdos2unix -c mac相同。

答案 1 :(得分:7)

此外,如果您使用vim,则可以通过执行

来强制执行UNIX行结束
:set fileformat=unix
:w

或只是添加

set fileformat=unix

到您的.vimrc文件

答案 2 :(得分:4)

我终于想通了我可以使用这个命令:

tr '^M' '\n' <build_test.sh >build_test_nocr.sh

通过按^MCtrl+v键添加Enter。或者,这具有相同的效果:

tr '\r' '\n' <build_test.sh >build_test_nocr.sh