当前位置:  开发笔记 > 编程语言 > 正文

为什么sed会因国际角色失败以及如何修复?

如何解决《为什么sed会因国际角色失败以及如何修复?》经验,为你挑选了2个好方法。

GNU sed版本4.1.5似乎与国际字符失败.这是我的输入文件:

Gras Och Stenar Trad - 从Moja到Minneapolis DVD [G2007DVD] 7812 | X
Gras Och Stenar Trad - 从Möja到明尼阿波利斯DVD [G2007DVD] 7812 | ÿ

(注意第二行的变音符号.)

而当我这样做

sed的/.*| //'

我希望只看到X和Y,因为我要求删除所有字符到'|' 超越它的空间.相反,我得到:

X
Gras Och Stenar Trad - 来自M?ÿ

我知道我可以使用tr删除国际字符.首先,但有没有办法只使用sed?



1> Torsten Mare..:

我认为如果文件的输入编码与您的环境的首选编码不同,则会发生错误.

示例:in是UTF-8

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

UTF-8可以安全地被解释为ISO-8859-1,你会得到奇怪的角色,但除此之外一切都很好.

示例:in是ISO-8859-1

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Gras Och Stenar Trad - From MöY
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

ISO-8859-1不能解释为UTF-8,解码输入文件失败.奇怪的匹配可能是因为sed尝试恢复而不是完全失败.

答案基于Debian Lenny/Sid和sed 4.1.5.



2> 小智..:

sed是非常好的非ASCII文本设置.但是,您可以使用(几乎)相同的代码perl并获得所需的结果:

perl -pe 's/.*\| //' x

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有