我正在寻找一些关于我一直看到的数据文件问题的帮助
数据文件包含错误
时看起来像这样H Data data data
R data datadata datadatadata^M
data data ^M
datadata
R data datadata datadatadata data data datadata
R data datadata datadatadata ^M
data data datadata
R data datadata datadatadata data data datadata
T data data data data
我需要删除^ M个字符并将以下行连接到数据文件中,并且每行都应以H,R或T开头。
H Data data data
R data datadata datadatadata data data datadata
R data datadata datadatadata data data datadata
R data datadata datadatadata data data datadata
R data datadata datadatadata data data datadata
T data data data data
我知道真正的答案是修复基础数据,但这不是一个选项,我正在寻找解决方法。
提前致谢
乔
答案 0 :(得分:0)
sed -i your file 's/^M$/R//g'
或
sed 's/^M$/R//g' oldfile >newfile ; mv newfile oldfile
这样就删除了dos字符并用一个R替换它。这是一个快速思考mybe,它有一个更好的解决方案。
答案 1 :(得分:0)
sed 's/\n^M//g' YourFile
或
sed 's/[[:cntrl:]]//g' YourFile
ps:^ M = Ctrl + M
答案 2 :(得分:0)
sed '/\r$/ { N; s/\r\n//; }' infile > outfile
注意:这取决于sed
理解控制字符。例如\r
,适用于Linux - 不确定Solaris;请注意^M
是\r
(CR)的另一种表示形式。
它的作用:
\r
结尾的行,命令N
会将\n
和 next 行附加到当前行。s
命令通过将其替换为空字符串,有效地从两个连接的行中删除生成的\r\n
序列。答案 3 :(得分:0)
首先使用dos2unix
工具转换文件
dos2unix filename
sed -i filename 's/^M$/R//g'
答案 4 :(得分:0)
这可能适合你(GNU sed):
sed ':a;$!N;s/\r\n//;ta;P;D' file
如果要将空格转换为制表符,请使用:
sed ':a;$!N;s/\r\n//;ta;s/ */\t/g;P;D' file