如果我打开我在Windows中创建的文件,所有行都以^M结尾。如何一次性删除这些字符?
^M
:%s/\r\+//g
在Vim中,这会剥离所有回车,只留下换行符。
:g/Ctrl-v Ctrl-m/s///
CtrlM是字符\r或回车,DOS行结尾添加。CtrlV告诉Vim在命令行插入一个文字CtrlM字符。
\r
作为一个整体,此命令将所有\r替换为空,将它们从行的末尾删除。
dos 2unix是一个命令行实用程序,可以执行此操作,如果您使用Ctrl-vCtrl-m输入^M,则:%s/^M//g会执行此操作,或者您可以:set ff=unix和Vim会为您执行此操作。
:%s/^M//g
:set ff=unix
文件格式设置有留档,Vim wiki有一个全面的页面在线结束转换。
或者,如果您经常来回移动文件,您可能不想转换它们,而是执行:set ff=dos,因此Vim将知道它是一个DOS文件并使用DOS约定作为行结尾。
:set ff=dos
您可以使用以下命令::%s/^V^M//g 其中'^'表示使用CTRL键。
:%s/^V^M//g
使用以下命令:
:%s/^M$//g
要显示^M,请键入CtrlV,然后键入CtrlM。CtrlV告诉Vim按字面意思输入下一个字符。
来自:文件格式
[Esc]:%s/\r$//
我更喜欢使用以下命令:
:set fileformat=unix
您还可以使用mac或dos将文件分别转换为Mac或MS-DOS/Windows文件约定。如果文件已经采用正确的格式,它什么也不做。
mac
dos
有关详细信息,请参阅Vim帮助:
:help fileformat
:set fileformat=unix从DOS转换为Unix。
更改视图中的行尾:
:e ++ff=dos:e ++ff=mac:e ++ff=unix
这也可以用作保存操作(: w单独不会使用您在屏幕上看到的行结尾保存):
:w ++ff=dos:w ++ff=mac:w ++ff=unix
您可以从命令行使用它:
for file in *.cppdovi +':w ++ff=unix' +':q' "$file"done
我通常使用
:%s/\r/\r/g
这似乎有点奇怪,但由于Vim匹配换行符的方式而有效。我也发现它更容易记住:)
通常您可以使用dos2unix命令。只要确保您阅读手册,因为GNU和BSD版本在处理参数的方式上有所不同。
dos2unix
BSD版本:
dos2unix $FILENAME $FILENAME_OUTmv $FILENAME_OUT $FILENAME
GNU版本:
dos2unix $FILENAME
或者,您可以在此处使用任何建议的答案创建自己的dos2unix,例如:
function dos2unix(){[ "${!}" ] && [ -f "{$1}" ] || return 1; { echo ':set ff=unix';echo ':wq';} | vim "${1}";}
dos2unix可以直接修改文件内容。
您可以直接在文件上使用它,而无需临时文件重定向。
dos2unix input.txt input.txt
上面使用假设的美国键盘。使用-437选项使用英国键盘。
-437
dos2unix -437 input.txt input.txt
以下步骤可以将DOS的文件格式转换为Unix:
:e ++ff=dos Edit file again, using dos file format ('fileformats' is ignored).[A 1]:setlocal ff=unix This buffer will use LF-only line endings when written.[A 2]:w Write buffer using Unix (LF-only) line endings.
参考:文件格式文件格式
tr -d '\15\32' < winfile.txt > unixfile.txt
(见:在Unix和Windows文本文件之间转换)
关于让^M出现的评论对我很有效。仅仅在我的vi中输入“^M”一无所获(未找到)。CTRL+VCTRL+M序列完美地做到了这一点。
我的工作替换命令是
:%s/Ctrl-V Ctrl-M/\r/g
在我的屏幕上是这样的:
:%s/^M/\r/g
@https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
此外,如前所述,^M=ctrl+v+Ctrl+M(不要只键入插入符号“^”和M)。
以下命令用于重新格式化当前目录中的所有. sh文件。我在我的Fedora操作系统上测试了它。
for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done
来自Wikia:
%s/\r\+$//g
这将找到所有回车标志(一个或多个代表)直到行尾并删除,因此只有\n将留在EOL。
\n
我找到了一个非常简单的方法:使用纳米打开文件:nano file.txt
nano file.txt
按Ctrl+O保存,但在按输入之前,按:Alt+D在DOS和Unix/Linux行结束之间切换,或:Alt+M在Mac和Unix/Linux行结束之间切换,然后按输入保存和Ctrl+X退出。
这是我的方式。我在DOS EOL中打开了一个文件,当我保存文件时,它会自动转换为Unix EOL:
autocmd BufWrite * :set ff=unix
您可以使用:
vim somefile.txt +"%s/\r/\r/g" +wq
或者dos 2unix实用程序。
我想要换行符来代替^M的。Perl来拯救:
perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt
或者写入stdout:
perl -p -e 's/\x0d/\n/g' < excel_created.txt
如果您在记事本中创建一个文件或在Windows中创建记事本++,将其带到Linux,然后通过Vim打开它,您将在每行的末尾看到^M。要删除它,
在您的Linux终端,键入
dos2unix filename.ext
这将是必要的魔法。
我知道我在哪里见过这个。这是FreeBSD登录提示:
您需要从DOS文件中删除所有这些^M字符吗?尝试
tr -d \\r < dosfile > newfile-- Originally by Dru <genesis@istar.ca>
在Vim中,键入:
:w !dos2unix %
这将通过管道将当前缓冲区的内容传输到dos 2unix命令并将结果写入当前内容。Vim将要求重新加载文件。
要直接在Linux控制台中运行:
vim file.txt +"set ff=unix" +wq
在VIM:
:e ++ff=dos | set ff=unix | w!
带VIM的外壳:
vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e ++ff=dos-强制打开dos格式的文件。
e ++ff=dos
set ff=unix-将文件转换为unix格式。
set ff=unix
unix