2014-02-27 30 views
2

我在尋找一些幫助上一個問題的數據文件我不斷看到SED查找模式結合線

數據文件看起來是這樣的,當它包含錯誤

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 

我知道真正的答案是修復基礎數據,但這不是一分鐘的選項,我正在尋找解決方法。

在此先感謝

+3

does'tr -d'\ r'< file > outFile' help you?祝你好運。 – shellter

回答

0
sed -i your file 's/^M$/R//g' 

sed 's/^M$/R//g' oldfile >newfile ; mv newfile oldfile 

因此,消除了DOS字符,並用R.這是一個快的想法取代它mybe有更好解決方案。

+0

感謝您的迴應,但沒有解決問題,具有^ M的行上的數據已經從上面的行中拆分出來,所以我需要將它們移出來,而不是僅將R添加到行中。 – user3360436

0
sed 's/\n^M//g' YourFile 

sed 's/[[:cntrl:]]//g' YourFile 

PS:^ M = Ctrl + M鍵

0
sed '/\r$/ { N; s/\r\n//; }' infile > outfile 

注意:這取決於sed理解控制字符。如\r,它可以在Linux上運行 - 不確定Solaris的問題;請注意0​​是\r(CR)的另一種表示形式。

做些什麼:

  • 對於\r結束行,指揮N追加\n下一個行到當前行。
  • s命令然後通過將其替換爲空字符串,從兩個連接的行中有效地移除生成的\r\n序列。
0

首先使用dos2unix工具

dos2unix filename 

sed -i filename 's/^M$/R//g' 
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