GNU sed 4.1.5版本似乎因国际字符而失败。这是我的输入文件:
Gras Och Stenar传统-从Moja到Minneapolis DVD [G2007DVD] 7812 | X Gras Och Stenar传统-从莫亚到明尼阿波利斯DVD [G2007DVD] 7812 | ÿ
(请注意第二行的变音符号。)
当我这样做
sed的/.* | //’<in
我希望只看到X和Y,因为我已要求删除所有字符,直到“ |”为止 和超越它的空间。相反,我得到:
X Gras Och Stenar传统-来自M?ÿ
我知道我可以使用tr删除国际字符。首先,但是有一种方法只能使用sed吗?
我认为如果文件的输入编码与环境的首选编码不同,则会发生错误。
示例:in是UTF-8
in
$ 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。