Unix sed查找模式,然后连接线
我正在寻找一些关于我一直看到的数据文件问题的帮助 当数据文件包含错误时,它看起来像这样Unix sed查找模式,然后连接线,unix,sed,solaris,Unix,Sed,Solaris,我正在寻找一些关于我一直看到的数据文件问题的帮助 当数据文件包含错误时,它看起来像这样 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 datada
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
我知道真正的答案是修复底层数据,但目前这不是一个选项,我正在寻找解决办法
提前谢谢
乔
或
这样就删除了dos字符,并用一个R替换它。这是一个很快想到的问题,mybe有更好的解决方案
sed 's/\n^M//g' YourFile
或
ps:^M=Ctrl+M
sed '/\r$/ { N; s/\r\n//; }' infile > outfile
注:这取决于sed
了解控制字符。例如\r
,它在Linux上工作-不确定Solaris;请注意,^M
是\r
(CR)的另一种表示形式
它的作用是:
- 对于以
结尾的行,命令\r
会将N
和下一行追加到当前行\N
- 然后,
命令将结果s
序列替换为空字符串,从而有效地从两个连接行中删除该序列\r\n
dos2unix
工具转换文件
dos2unix filename
sed -i filename 's/^M$/R//g'
这可能适用于您(GNU-sed):
如果要将空格转换为选项卡,请使用:
sed ':a;$!N;s/\r\n//;ta;s/ */\t/g;P;D' file
tr-d'\r'outFile
对您有帮助吗?祝您好运。感谢您的回复,但这并没有解决问题,带有^M的行上的数据已从上面的行中分离出来,因此我需要将这些数据向上移动,而不仅仅是在行中添加一个R。
sed '/\r$/ { N; s/\r\n//; }' infile > outfile
dos2unix filename
sed -i filename 's/^M$/R//g'
sed ':a;$!N;s/\r\n//;ta;P;D' file
sed ':a;$!N;s/\r\n//;ta;s/ */\t/g;P;D' file