删除CR行终止符

Hon*_*hen 5 unix shell newline dos

首先我会说我已经阅读过这篇文章但是我仍然有问题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 -
Run Code Online (Sandbox Code Playgroud)

然而:

  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 -

结果file build_test.sh是:

build_test.sh: ASCII text, with CR line terminators
Run Code Online (Sandbox Code Playgroud)

这篇文章之后,^M不再存在,但是没有更多的换行符:-(
结果file build_test_no_cr.sh现在是:

build_test_nocr.sh: ASCII text, with no line terminators
Run Code Online (Sandbox Code Playgroud)

解决方案可以在这里看到.

但是我仍然想为什么不cat显示任何内容并more显示如此奇怪的结果.此外,为什么dos2unixset fileformat=unixVim在这种情况下失败了.

PS:我想这也许是我的编辑器(Vim的leafpad?)只产生\r相当\n的换行符.怎么会这样?

fge*_*fge 11

\r新行的简单终止符是"旧Mac"行终止符,奇怪的是2012 +中的编辑器甚至生成带有这种行终止符的文件......无论如何,您可以使用mac2unix命令,它是dos2unix分发的一部分:

# Edits thefile inline
mac2unix thefile
# Takes origfile as an input, outputs to dstfile
mac2unix -n origfile dstfile
Run Code Online (Sandbox Code Playgroud)

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

注意与之mac2unix相同dos2unix -c mac.


jpm*_*muc 7

此外,如果使用vim,则可以通过执行来强制执行UNIX行结束

:set fileformat=unix
:w
Run Code Online (Sandbox Code Playgroud)

或者只是添加

set fileformat=unix
Run Code Online (Sandbox Code Playgroud)

到你的.vimrc文件


Hon*_*hen 5

我终于发现我可以使用以下命令:

tr '^M' '\n' <build_test.sh >build_test_nocr.sh
Run Code Online (Sandbox Code Playgroud)

^M通过按Ctrl+vEnter键将位置添加。或者,具有相同的效果:

tr '\r' '\n' <build_test.sh >build_test_nocr.sh
Run Code Online (Sandbox Code Playgroud)