在Ubuntu上查找并删除DOS行结尾

时间:2012-09-20 08:36:56

标签: bash unix sed awk grep

我发现我的很多文件都有DOS行结尾。在VI中它们看起来像这样:“^ M”。 我不想修改没有这些DOS行结尾的文件。如何使用bash脚本执行此操作?谢谢!

EV

6 个答案:

答案 0 :(得分:3)

在ubuntu上,您使用fromdos实用程序

fromdos test.txt
  

上面的示例将采用MS-DOS或Microsoft Windows文件或具有不同行分隔符的其他文件,并使用新的行分隔符格式化该文件,以便在Linux和Unix中读取。

答案 1 :(得分:3)

使用GNU coreutils的一种方式:

< file.txt tr -d '\r'

答案 2 :(得分:1)

有很多选项..你可以试试其中任何一个.. http://www.theunixschool.com/2011/03/different-ways-to-delete-m-character-in.html

答案 3 :(得分:0)

您可以使用命令:

   dos2ux file.in>file.out or:

in perl:

perl -pi -e 's/\r//g' your_file

或者你可以这样做:

  • 在vi中打开
  • 进入命令模式
  • 输入:%s/[ctrl-V][CTRL-M]//g

答案 4 :(得分:0)

如果您需要按文件结尾

进行过滤,请对Winning答案进行修改
grep -URl ^M . | grep .php | xargs dos2unix

我使用的是dos2unix而不是fromdos,但效果应该相同。

答案 5 :(得分:0)

cat origin_file.txt | sed "s/^M//" > dest_file.txt

您必须执行上述相同的操作,ctl-V 然后 ctl-M 才能获得该字符。这对我来说更可取,因为它可以跨多个平台移植,并且在 bash 中保持简单。

在 ubuntu 上我也发现这有效:

cat origin_file.txt | sed "s/\r//" > dest_file.txt