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

有帮助吗?

解决方案

DOS2UNIX 是一个可以执行此操作的命令行实用程序,或者 :%s/^M//g 如果你使用的话会 控制键-v 控制键- 输入^M,或者您可以 :set ff=unix vim 会为你做这件事。

关于“文件格式”设置的文档是 这里, ,vim wiki 有一个全面的 页面行尾转换.

或者,如果您经常来回移动文件,您可能不想转换它们,而是想这样做 :set ff=dos, ,因此 vim 会知道这是一个 DOS 文件并使用 DOS 约定作为行结尾。

其他提示

更改视图中的行结尾:

: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

我通常使用

:%s/\r/\r/g

这看起来有点奇怪,但是由于 vim 匹配换行符的方式而有效。我也发现这样更容易记住:)

我更喜欢使用以下命令:

:set fileformat=unix

您还可以使用 mac 或者 dos 分别将您的文件转换为 Macintosh 或 MS-DOS/MS-Windows 文件约定。如果文件的格式已经正确,它什么也不做。

有关详细信息,请参阅 vim 帮助:

:help fileformat
:%s/\r+//g

在 Vim 中,这会删除所有回车符,只留下换行符。

:set fileformat=unix 从 dos 转换到 unix。

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

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

dos2unix input.txt input.txt

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

dos2unix -437 input.txt input.txt

将文件目录从 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)

tr -d '\15\32' < winfile.txt > unixfile.txt

(看: http://kb.iu.edu/data/acux.html)

以下步骤可以将 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.

参考: http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix

使用以下命令:

:%s/^M$//g 

获取 ^M 出现类型 控制键V 然后 控制键中号. 控制键V 告诉 Vim 按字面意思获取下一个输入的字符。

我发现了一个非常简单的方法:用nano打开文件: nano file.txt

控制键+ 保存,但在按下之前 进入, , 按: 丙氨酸转氨酶+D 在 DOS 和 Unix/Linux 行结束之间切换,或者: 丙氨酸转氨酶+中号 在 Mac 和 Unix/Linux 行尾之间切换,然后按 进入 保存并 控制键+X 退出。

:g/Ctrl-v Ctrl-m/s///

控制键中号 是角色 \r, ,或回车符,这是 DOS 行结尾添加的。 控制键V 告诉 vim 插入一个文字 控制键中号 命令行中的字符。

总的来说,这个命令取代了所有 \r 没有任何内容,将它们从行尾删除。

您可以使用:

vim somefile.txt +"%s/\r/\r/g" +wq

或者 dos2unix utility .

关于让 ^M 出现的评论对我有用。仅在我的 vi 中输入“^M”没有任何结果(未找到)。这 控制键+V 控制键+中号 不过序列完美地做到了这一点。

我的工作替换命令是

:%s/Ctrl-V Ctrl-M/\r/g

它在我的屏幕上看起来像这样:

:%s/^M/\r/g

您可以使用以下命令:
:%s/^V^M//g
其中“^”表示使用 控制键 钥匙。

下面的命令用于重新格式化当前目录中的所有 .sh 文件,我在我的 Fedora 操作系统上测试了它。

for file in *.sh; do awk '{ sub("\r$", ""); print }' $file >luxubutmp; cp -f luxubutmp $file; rm -f luxubutmp ;done

通常有一个 dos2unix 您可以为此使用命令,只需确保您阅读了手册,因为 GNU 和 BSD 版本在处理参数的方式上有所不同。

BSD版本:

dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME

GNU 版本:

dos2unix $FILENAME

或者,您可以创建自己的 dos2unix 此处建议的任何答案,例如:

function dos2unix(){
    [ "${!}" ] && [ -f "{$1}" ] || return 1;

    { echo ':set ff=unix';
      echo ':wq';
    } | vim "${1}";
}

我知道我在某处见过这个。以下是 FreeBSD 登录提示:

需要从 DOS 文件中删除所有这些 ^M 字符吗?尝试

tr -d \\r < dosfile > newfile
    -- Originally by Dru <genesis@istar.ca>

在 vim 中输入:

:w !dos2unix %

这会将当前缓冲区的内容通过管道传递给 dos2unix 命令,并将结果写入当前内容。Vim 会要求重新加载文件

直接运行linux控制台:vim file.txt +"set ff=unix" +wq

虽然这个话题已经很老了,但我想从 wikia 放一些东西:

%s/\r\+$//g

填充找到所有回车符(一个或多个代表)直到行尾并删除,所以只需 \n 将留在 eol。

这是我的方式。我在 dos EOL 中打开了一个文件,当我保存该文件时,该文件将自动转换为 unix EOL

autocmd BufWrite * :set ff=unix

如果你在Windows中的NotePad或NotePad ++中创建一个文件并将其带到Linux并通过vim打开它,你将在每行末尾看到^M。要删除这个,

在您的 Linux 终端上,输入

dos2unix 文件名.ext

这将发挥所需的魔力。

我想要换行符来代替 ^M。Perl 来拯救:

perl -pi.bak -e 's/\x0d/\n/g' excel_created.txt

或者写入标准输出:

perl -p -e 's/\x0d/\n/g' < excel_created.txt
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top