删除列中的回车符

时间:2013-07-10 07:31:51

标签: unix carriage-return

我在Unix中有一个文件,其中有一个额外的回车符出现在特定字段中并希望将其删除。

我尝试在字段中打印字符的ASCII值,它显示如下:

  

head -1 BVP.csv | cut -d“,” - f26 | tr -d“\ n”| od -An -t dC    34 78 13

该字段中的实际值为:“N [回车]

所以我尝试按如下方式删除回车符(ASCII值:13)并尝试将输出打印到新文件BVP1.csv:

  

tr -d'\ r'< BVP.csv> BVP1.csv

然后我执行了相同的命令

  

头-1 BVP1.csv | cut -d“,” - f26 | tr -d“\ n”| od -An -t dC

34 78

它打印ASCII值而不回车。

但是当我在任何文本编辑器中打开文件,甚至从Windows打开文件时,我都可以看到该行打破了文件中的新记录,即不会删除其他换行符。

任何人都可以建议一种方法来删除现场出现的额外回车。

先谢谢, 汤姆

1 个答案:

答案 0 :(得分:0)

我愿意打赌在你试图消除的LF(ASCII 13)之后有一个CR(ASCII 10)字符。由于你的tr -d '\n',你没有看到它。我愿意打赌你需要从BVP.csv的第26栏中移除CRLF。但是,您只想删除LF之后出现的CR

您可以尝试使用这个简单的perl配方从csv文件中删除所有CR+LF个组合,同时保持裸LF完整:

perl -p -e 's/\r\n//g' < BVP.csv > BVP1.csv

这将在CR+LF单独留下时删除LF

我认为这会做你想要的是因为没有尾随CR的裸LF相对不常见。 MacOS X之前的文本文件格式使用CR而没有LF。自OS X以来,这些已经大大减少了。