2013-02-22 70 views
5

我想操縱文本文件並從文本中刪除非ASCII字符。我不想刪除該行。我只想刪除違規字符。我試圖讓下面的表達式工作:試圖只刪除非ASCII字符

sed '/[\x80-\xFF]/d'

+1

請參閱[this](http://stackoverflow.com/questions/3337936/remove-non-ascii-characters-from-csv)答案。 – speakr 2013-02-22 23:38:01

+1

這個線程可能有你正在尋找的答案http://stackoverflow.com/questions/8571601/skip-remove-non-ascii-character-with-sed – Ifthikhan 2013-02-22 23:38:32

+0

你的命令將刪除所有包含非ascii字符的行。如果這不是你想要的,檢查重複的問題 – 2013-02-23 00:02:24

回答

33

建議的解決方案可能會失敗,sed的,例如特定版本GNU sed 4.2.1。

使用tr

tr -cd '[:print:]' < yourfile.txt 

這將消除不[\x20-\x7e]任何字符。

如果你想保留例如換行,只需添加\n

tr -cd '[:print:]\n' < yourfile.txt 

如果你真的想保持所有 ASCII字符(甚至是控制代碼):

tr -cd '[:print:][:cntrl:]' < yourfile.txt 

這將刪除任何字符不是[\x00-\x7f]

+1

嗨talkr,有沒有辦法保存文本文件的格式。 tr命令將所有內容都送到一條連續的線上? – 2013-02-23 00:39:56

+1

@bosra:我添加了一個示例來保留換​​行符。 – speakr 2013-02-23 00:44:28

+0

男人,如果我可以多勞多得這幾次,我會......感謝 – 2013-02-23 21:18:08