我有很多小写的文字,唯一的问题是,有很多特殊字符,我想用数字删除它。
下一个命令它不够强大:
tr -cd '[alpha]\n '
如果是éćščž和其他一些人,则返回“?”但我想删除所有这些。有更强的命令吗?
我使用linux mint 4.3.8(1)-release
答案 0 :(得分:20)
您可以使用tr
仅打印如下字符串中的可打印字符。只需在输入文件中使用以下命令即可。
tr -cd "[:print:]\n" < file1
标志-d
用于删除输入流中参数中定义的字符集,而-c
用于补充那些(反转提供的内容)。因此,如果没有-c
,命令将从输入流中删除所有可打印字符,并使用它通过删除不可打印字符来补充它。我们还保留换行符\n
以保留输入文件中的行结尾。删除它只会产生一个大的最终输出。
[:print:]
只是一个POSIX bracket expression,它是表达式[:alnum:]
,[:punct:]
和空格的组合。 [:alnum:]
与[0-9A-Za-z]
相同,[:punct:]
包含字符!
"
#
$
%
{{1 }} &
'
(
)
*
+
,
-
.
{{1 }} /
:
;
<
=
>
?
@
[
{{1 }} \
]
^
_
`
{
答案 1 :(得分:4)
我不完全确定文本来自您的问题的位置,但我们只是说“小写的大量文本”位于名为special.txt
的文件中,您可以执行以下操作,但重点更多在你想要保留的角色上:
cat special.txt | sed 's/[^a-z A-Z]//g'
这有点像用斧头做手术。
帖子Remove non-ascii characters from ...
中的另一个可能的解决方案如果上述问题无法解决您的问题,请尝试提供更多详细信息,我可能会提供更具可操作性的答案。
答案 2 :(得分:0)
只想添加我一点。下面的代码将更好地消除上述所有字符,并将它们替换为空格并同时保留换行符
tr -s "[:punct:]" " "
从手动输入-s
将输入中最后一个操作数(字符串1或字符串2)中列出的多个字符压缩为单个字符实例。在所有删除和翻译完成后会发生这种情况。