如果我打开在Windows中创建的文件,所有行都以^M结尾。如何一次删除这些字符?


当前回答

将文件目录从DOS转换为Unix

使用命令行和sed,查找当前目录中扩展名为“.ext”的所有文件,并删除所有“^M”

@ 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)。

其他回答

dos2unix可以直接修改文件内容。

您可以直接在文件上使用它,而不需要临时文件重定向。

dos2unix input.txt input.txt

以上使用假定的美国键盘。使用-437选项使用英国键盘。

dos2unix -437 input.txt input.txt

更改视图中的行尾:

:e ++ff=dos
:e ++ff=mac
:e ++ff=unix

这也可以用作保存操作(:w单独保存不会使用屏幕上看到的行尾):

:w ++ff=dos
:w ++ff=mac
:w ++ff=unix

您可以从命令行使用它:

for file in *.cpp
do 
    vi +':w ++ff=unix' +':q' "$file"
done

在Vim中,键入:

:w !dos2unix %

这将把当前缓冲区的内容通过管道传输到dos2unix命令,并在当前内容上写入结果。之后,Vim将要求重新加载文件。

将文件目录从DOS转换为Unix

使用命令行和sed,查找当前目录中扩展名为“.ext”的所有文件,并删除所有“^M”

@ 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