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 我知道我可以使用tr删除国际字符.首先,但有没有办法只使用sed? 我认为如果文件的输入编码与您的环境的首选编码不同,则会发生错误. 示例: UTF-8可以安全地被解释为ISO-8859-1,你会得到奇怪的角色,但除此之外一切都很好. 示例: ISO-8859-1不能解释为UTF-8,解码输入文件失败.奇怪的匹配可能是因为sed尝试恢复而不是完全失败. 答案基于Debian Lenny/Sid和sed 4.1.5.
Gras Och Stenar Trad - 来自M?ÿ
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
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
sed
是非常好的非ASCII文本设置.但是,您可以使用(几乎)相同的代码perl
并获得所需的结果:
perl -pe 's/.*\| //' x