2016-04-28 156 views
5

我有很多小寫的文本,唯一的問題是,有很多特殊字符,我想用數字全部刪除它。從Bash中的字符串中刪除所有特殊字符

下一個命令它不夠強大:

tr -cd '[alpha]\n ' 

在éćščž的情況下,有些人則返回「?」但我想刪除所有這些。有沒有更強的命令?

我使用Linux Mint的4.3.8(1)-release

+3

每個角色都有自己的特色。 –

+0

你的問題不是很清楚。給予更多的上下文可能會得到更多有用的迴應。 –

回答

11

您可以使用tr僅打印下面字符串中的可打印字符。只需在輸入文件中使用以下命令即可。

tr -cd "[:print:]\n" < file1 

標誌-d是指在輸入流的參數定義的刪除字符集和-c是補充這些(倒像商提供的是什麼)。因此,如果沒有-c,該命令將從輸入流中刪除所有可打印字符,並使用它補充它,方法是刪除不可打印的字符。我們還保留換行符\n以保留輸入文件中的行尾。刪除它只會產生一個大系列的最終產出。

[:print:]只是一個POSIX bracket expression這是表達式[:alnum:],[:punct:]和空間的組合。所述[:alnum:]是相同[0-9A-Za-z][:punct:]和包括字符!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

2

我不完全某些地方的文字是從你的問題來,但讓剛剛說的「不少小寫文本中的」是所謂的文件special.txt你可以不喜歡以下,但更專注於您想保留字符:

cat special.txt | sed 's/[^a-z A-Z]//g' 

這是一個有點像做用斧頭雖然手術。

在後Remove non-ascii characters from ...

如果上述方法都無法解決您的問題另一種可能的解決方案,請儘量提供更多的細節,我也許能提供一個更可行的答案。