2013-02-08 235 views
0

我想添加一個額外的列到一個製表符分隔的文件。 該文件是這樣的:sed添加額外的列

#> cat /tmp/myfile 
Aal  Fisch_und_Fleisch 
Aalsuppe  Fisch_und_Fleisch 

我想要做的方式是通過SED,匹配全行,用新列打印出來一起。然而,其他列上寫的是線,而不是末端的中間:

#> cat /tmp/myfile | sed 's#^\(.*\)$#\1\t1#g' 
Aal  1isch_und_Fleisch 
Aalsuppe1  Fisch_und_Fleisch 

當我做了一些它的工作原理手動創建線路進行仔細的檢查,但:

#> echo -e "aaaaaaaaaa\taaaaaaaaaaaa\nbbbbbbb\tbbbbbbbb" | sed 's#^\(.*\)$#\1\t1#g' 
aaaaaaaaaa  aaaaaaaaaaaa 1 
bbbbbbb bbbbbbbb  1 

我猜對了可能是一個編碼/換行符的問題,這裏是file是說:

#> file /tmp/myfile 
/tmp/myfile: ASCII text, with CRLF line terminators 

如果它是一個編碼/換行符的問題,我該怎麼做呢?

+0

既然你在捕獲的組後面有'$','sed'必須在行中間檢測到一個換行符,這對我來說似乎很陌生。 – 2013-02-08 11:42:34

回答

3

我無法重現您的具體問題,但在此之前已經看到了類似的事情。實質上,CRLF行結束會導致視覺顯示中的奇怪現象,因爲CR部分(回車符)會導致光標移動到同一行的開頭,而不是移動到新行的開頭。最簡單的可能只是切換到Unix風格的結局。

要切換到Unix風格的結尾,使用

dos2unix 
tr -d '\r' 

一個作爲一個整體,像

cat /tmp/myfile | dos2unix | sed 's#^\(.*\)$#\1\t1#g' 

如果需要切換,你可以使用unix2dos

1

這可能爲你工作(GNU SED):

sed 's/$/\t1/' file 
+1

這比OP的版本簡單,但問題不是錯誤的'sed'命令。 OP的命令也起作用。 – 2013-02-08 11:44:57

+0

比我的好多了,謝謝! – benroth 2013-02-08 12:36:29