一个人将如何使用sed
或另一种工具来删除除特定多字节范围之外的所有字符?
例如,该范围\xd8\xa0 - \xd9\x8a
涵盖以 UTF-8 编码的阿拉伯字符。这是我在使用 sed 时天真的充满希望的尝试:
$ echo "Peace be upon you. السلام عليكم. שלום עליכם. Paz sobre vosotros." | sed -n -e 's|[^\xd8\xa0-\xd9\x8a]||p'
sed: -e expression #1, char 25: Invalid range end
理解sed
了多字节字符,那应该给我们留下字符串:
السلام عليكم
我考虑过使用iconv
转换为一些特定于阿拉伯语的编码,使用sed
,然后转换回来。然而,我正在做的工作并不简单,比如我可能想同时保留阿拉伯语和希伯来语,所以如果可能的话,我想在整个过程中将所有内容都保存在 UTF-8 中。
如果sed
不能使用多字节字符,我应该使用什么?我已经搜索了这两个sed
和perl
解决方案,但没有运气。
请注意,我尝试向UTF-8
问题添加标签,但 unix.SE 将其更改为Unicode
标签。这里没有 Unicode,这些是存储在磁盘上的编码字符串。我认为应该有一个单独的UTF-8
标签。