2016-11-19 88 views
0

我有大的文本文件,其中通過編寫=然後newline字符有時將長行分成多行。 (來自Kaggle的安然電子郵件數據)。因爲即使是單詞也是這樣被打破的,我想用數據做一些機器學習,我想刪除這些休息。據我所見,組合=\n僅用於這些休息時間,所以如果我刪除這些休息時間,我可以獲得相同的信息而沒有休息時間,也不會丟失任何信息。使用sed刪除空文件中的字符串結果

  • 我不能使用tr,因爲它只替換1個字符,但我有兩個字符來替換。
  • sed命令我使用至今不得要領是:

    sed --in-place --quiet --regexp-extended 's/=\n//g' email_aa_edit

    其中email_aa_edit是安然郵件數據的一部分(用分裂分裂吧)是我的輸入文件。但是,這隻會產生一個空文件,我不知道爲什麼。 Afaik =本身不是特殊字符,換行符應該是\n

刪除那些=\n發生的正確方法是什麼?

+0

我想用perl:'perl -pi -e's/= \ n //'email_aa_edit' – melpomene

+0

@melpomene有趣,我確定我有相同的正則表達式來嘗試使用perl,但其他參數是不同的,它不起作用。你的工作。 – Zelphir

回答

2

無法刪除,因爲通過線SED工程線換行字符,但如果你追加下一行到模式空間有可能:

sed ':a;/=$/{N;s/=\n//;ta}' file 

細節:

:a; # defines a label "a" 
/=$/ { # if the line ends with = 
    N; # append the next line to the pattern space 
    s/=\n//; # replace the =\n 
    ta # jump to label "a" when something is replaced (that's always the case 
     # except if the last line ends with =) 
} 

注意:如果您的文件使用Windows換行符序列,請將\n更改爲\r\n

+0

我不知道爲什麼,但我的輸入文件保持不變,就好像該命令完全沒有效果一樣。 – Zelphir

+0

@ Zelphir:添加就地選項(我已經寫了命令,沒有任何切換,使其更清楚)。 –

+0

是的工作。至少在我明白了之後,我必須從命令中刪除'--quiet'選項:) – Zelphir