2013-08-26 43 views
5

我想用sed單個標籤替換所有的多個標籤。 我試圖使用在sed中用單個標籤替換標籤

sed 's:\t+:\t:' .\text.CSV > newtext.csv 

但這似乎並沒有工作

如果我打開崇高和正則表達式替換所有\t+\t它工作正常

什麼是錯的我SED?

另外,如果我有

sed 's:\t\t*:,:g' text.CSV > newtext.csv 

用逗號替換標籤我得到這種線

264262360,20030826,200308,2003,2003.6466,BUS,EMPLOYER,,,,,,BUS,,, ,,,,,,,,,,0,051,051,05,1,3.4,12,2,12,5.24866163479182,1 
+1

記住'+'是指一個或多個這樣也可以寫入'\ t \ t *' – potong

+0

如果'\ t'不工作,請嘗試使用[Ctrl] - [v] [Tab] ([見這個答案](http://stackoverflow.com/questions/6392249/how-to-enter-a-tab-char-on-command-line))如果在一個* nix終端工作。複製粘貼製表符可能會起作用,但在我的終端中,製表符被四個空格替換。 –

回答

11

您還可以使用tr用單來替代多個標籤:

tr -s '\t' '\t' <inputfile> outfile 

-s選項擠壓重複:

-s--squeeze-重複

 replace each input sequence of a repeated character that is 
     listed in SET1 with a single occurrence of that character 
+2

注意'tr -s'\ t''足夠擠壓,第二''t''不是必需的。 – fedorqui

7

使用-r選項和g標誌:

sed -r 's:\t+:\t:g' text.CSV > newtext.csv 

-r到使+工作。

g flag替換所有的事件。

UPDATE

如果您sed不支持-r選項,試試下面的不是:

sed 's:\t\t*:\t:g' text.CSV > newtext.csv 
+0

這不適合我...可能是我的sed壞了嗎? –

+0

@NickGinanto,你使用什麼操作系統? – falsetru

+0

我正在嘗試使用PowerShell的win7。也嘗試過用cygwin –

0

你也可以使用

sed "s/\t\+/\t\g" test.csv >> newtest.csv