2014-02-17 55 views
1

我用下面的命令在一個巨大的文本文件SED匹配模式 tTEXT t不工作

sed 's/\tEN-GB\t//g' "/home/ubuntu/0214/corpus/C.txt" 

該文件包含一個[標籤] EN-GB [標籤]每一行,但我得到是原文。我無法弄清楚爲什麼。 注意:當我使用's \ t // g'時它的工作原理和結果字符串是[很多沒有選項卡] EN-GB [很多無選項卡]在每一行中,所以標籤消失。

更新:這裏是輸出的從貓-vet的牽連部分:

^@2^@0^@0^@7^@0^@1^@0^@4^@~^@1^@6^@3^@2^@4^@3^@^I^@^I^@0^@^I^@E^@N^@-^@G^@B^@^I^@T^@h^@e^@  ^@a^@d^@m^@i^@n^@i^@s^@t^@ 

我出的黑魔法......在此先感謝

+2

它工作正常對我來說。你確定它是'EN-GB'之前和之後的標籤嗎? – fedorqui

+0

是的。請注意:'s/\ tE // g'有效,但'/ \ tEN // g'不會。看起來像兩個字母E和N對他來說太多了 –

+0

看起來像你在Ubuntu上 - 什麼是'sed' versionn('sed --version')?要排除'sed'本身的問題,看看下面的結果是否爲「[Col1] [Col3]」:'sed's/\ tEN-GB \ t // g'<<< $'[Col1] \ tEN- GB \ t [Col3]'' – mklement0

回答

1

您可以使用ANSI-C報價來表示TAB字符:

sed 's/'$'\tEN-GB\t''//g' filename 

編輯: cat -vet的輸出表明您在輸入中有NULL字符。在將結果輸送到上述命令之前,除去它們。你說:

tr -d '\x0' < filename | sed 's/'$'\tEN-GB\t''//g' 
+0

這隻會刪除標籤,但我仍然可以做到。我需要的是標籤文本標籤 –

+0

謝謝,但沒有變化:( –

+0

@ViktorPless你需要擺脫輸入中的空字符;請參閱上面的編輯 – devnull

3

看來,你的sed的命令是正確的,但你有一些空字符在文本文件中

運行這個sed命令先刪除空值:

sed -i.bak 's/\x0//g; s/\tEN-GB\t//g' "/home/ubuntu/0214/corpus/C.txt" 
+1

+1;它可以在一個命令中完成,無需預處理輸入文件的單獨通行證:'sed's/\ x0 // g; s/\ tEN-GB \ t // g'「/home/ubuntu/0214/corpus/C.txt」'。 – mklement0

+0

@ mklement0:謝謝,是的,它絕對可以在單一sed命令中完成,讓我編輯。 – anubhava