2016-04-28 223 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 ...

如果上述方法都无法解决您的问题另一种可能的解决方案,请尽量提供更多的细节,我也许能提供一个更可行的答案。

相关问题