linux将列内容转换为行,在DOS中将DOS行结尾转换为Linux行结尾

在DOS中将DOS行结尾转换为Linux行结尾

如果我打开我在Windows中创建的文件,则所有行都以^M结尾。

如何一次删除这些字符?

26个解决方案

930 votes

dos2unix是一个命令行实用程序,它将执行此操作,或者:set ff=dos将使用Ctrl-v Ctrl-m输入^ M,或者您可以:set ff=unix和vim将为您执行此操作。

'fileformat'设置上的文档在这里,vim wiki有一个在线结束转换的综合页面。

或者,如果你来回移动文件很多,你可能不想转换它们,而是做:set ff=dos,所以vim会知道它是一个DOS文件,并使用DOS约定进行行结束。

pjz answered 2018-12-26T11:47:12Z

233 votes

更改视图中的行结尾:

:e ++ff=dos

:e ++ff=mac

:e ++ff=unix

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

:w ++ff=dos

:w ++ff=mac

:w ++ff=unix

您可以从命令行使用它:

for file in $(ls *cpp)

do

vi +':w ++ff=unix' +':q' ${file}

done

Ludvig A. Norin answered 2018-12-26T11:47:41Z

150 votes

我通常使用

:%s/\r/\r/g

这看起来有点奇怪,但是因为vim匹配换行的方式而起作用。 我也发现它更容易记住:)

answered 2018-12-26T11:48:05Z

72 votes

我更喜欢使用以下命令:

:set fileformat=unix

您也可以使用mac或dos分别将您的文件转换为macintosh或MS-DOS / MS-Windows文件约定。 如果文件格式正确,则无效。

有关更多信息,请参阅vim帮助:

:help fileformat

Sylvain Defresne answered 2018-12-26T11:48:34Z

19 votes

:%s/\r+//g

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

mercutio answered 2018-12-26T11:48:54Z

16 votes

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

answered 2018-12-26T11:49:14Z

13 votes

来自:[http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix]

[Esc]:%s / \ r $ $

Alex Gartrell answered 2018-12-26T11:49:39Z

9 votes

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

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

dos2unix input.txt input.txt

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

dos2unix -437 input.txt input.txt

Venkataramesh Kommoju answered 2018-12-26T11:50:08Z

7 votes

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

Sparkida answered 2018-12-26T11:50:41Z

6 votes

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

(见:[http://kb.iu.edu/data/acux.html)]

MichaelD answered 2018-12-26T11:51:01Z

5 votes

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

ajitomatix answered 2018-12-26T11:51:26Z

5 votes

使用以下命令:

:%s/^M$//g

获取^M以显示类型CtrlV然后CtrlM。 CtrlV告诉Vim按字面输入下一个字符。

Dave Webb answered 2018-12-26T11:51:50Z

4 votes

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

按CTRL + O保存,但在按Enter键之前,按:ALT + D在DOS和Unix / Linux行结束之间切换,或者:ALT + M在Mac和Unix / Linux行结束之间切换,然后按Enter保存 和CTRL + X退出。

Stefan Sjöberg answered 2018-12-26T11:52:15Z

4 votes

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

CtrlM是字符\r,或回车符,DOS行结尾添加。 CtrlV告诉vim在命令行插入一个文字CtrlM字符。

总的来说,这个命令用什么都替换所有\r,从行的末尾删除它们。

Rob Wells answered 2018-12-26T11:52:40Z

4 votes

您可以使用:

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

或dos2unix utility。

Christy Wald answered 2018-12-26T11:53:04Z

4 votes

让^ M出现的评论对我有用。 仅仅在我的vi中键入“^ M”一无所获(未找到)。 CTRL + V CTRL + M序列完美地完成了它。

我的工作替代命令是

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

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

:%s/^M/\r/g

Dannid answered 2018-12-26T11:53:33Z

3 votes

您可以使用以下命令:

:%s/^V^M//g

其中'^'表示使用CTRL键。

JayG answered 2018-12-26T11:54:01Z

2 votes

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

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

Maerlyn answered 2018-12-26T11:54:21Z

1 votes

通常有一个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}";

}

dsm answered 2018-12-26T11:54:55Z

1 votes

我知道我在某个地方见过这个。 这是FreeBSD登录提示:

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

tr -d \\r < dosfile > newfile

-- Originally by Dru

Albaro Pereyra answered 2018-12-26T11:55:19Z

1 votes

在vim中,键入:

:w !dos2unix %

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

Tallak Tveide answered 2018-12-26T11:55:44Z

1 votes

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

CBuzatu answered 2018-12-26T11:56:04Z

0 votes

虽然这个主题已经很老了,但我想从wikia中添加另一个东西:

%s/\r\+$//g

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

loadaverage answered 2018-12-26T11:56:29Z

0 votes

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

autocmd BufWrite * :set ff=unix

Thomas PABST answered 2018-12-26T11:56:49Z

0 votes

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

在您的Linux终端上,输入

dos2unix filename.ext

这将完成所需的魔力。

Dr. Santle Camilus answered 2018-12-26T11:57:22Z

0 votes

我想用换行代替^ M'。 Perl救援:

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

或者写入stdout:

perl -p -e 's/\x0d/\n/g' < excel_created.txt

user3379574 answered 2018-12-26T11:57:46Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值