2013-10-20 145 views
2

我想操作一個ZDT格式的詞彙表,即:Traditional Characters \t Simplified Characters \t Pinyin \t English \n。我想在行首開始刪除繁體字符,所以我試圖用sed 's/^[^\t]*\t//g' input.txt > output.txt將它們刪除,但是這使我無法接近我想要的結果,因爲在某些行中,英文部分中某處的所有內容都將被刪除,並在其他行什麼都不刪除,我不能弄出一個模式。sed刪除文本的不同部分

我認爲RegEx是正確的,因爲我測試過它here和Sublime Text 2也可以按照預期使用它。這裏有什麼問題?

編輯:
input.txt開頭http://pastebin.com/fRemVPyT
output.txthttp://pastebin.com/EJkszFNF

+0

這'sed'命令似乎對我很好('/ g'標誌是無用的)。你能否提供一些不符合你期望的輸入數據? – Birei

+0

@Birei我加了一個sed yield的例子。 –

+1

它適用於我。請注意,您在檢測到標籤並刪除後纔會發現文字「t」字符。也許是一個'shell'問題,一個老的'sed'版本或類似的東西。嘗試兩次轉義'\\ t'。 – Birei

回答

2

開始不全部sed版本喜歡\t。嘗試使用字面製表符。您可以創建包含一個標籤這樣的bash變量:

export TAB=$'\t' 

也許是這樣的:

sed "s/^[^$TAB]*$TAB//g" input.txt > output.txt 
+0

它似乎是一個OS X問題http://nixtricks.wordpress.com/2012/05/07/sed-replace-a-tab-character-using-sed/。我實際上是通過用'ctrl-v'然後用'tab'輸入標籤來解決它的。 –