Linux 为什么sed在使用国际字符时失败,以及如何修复?
Linux 为什么sed在使用国际字符时失败,以及如何修复?,linux,internationalization,sed,character,Linux,Internationalization,Sed,Character,GNU-sed版本4.1.5似乎无法使用国际字符。这是我的输入文件: Gras Och Stenar Trad - From Moja to Minneapolis DVD [G2007DVD] 7812 | X <br> Gras Och Stenar Trad - From Möja to Minneapolis DVD [G2007DVD] 7812 | Y 我知道我可以使用tr删除国际字符。首先,有没有办法只使用sed?sed对于非ASCII文本的设置不是很好。但是,您可以
GNU-sed版本4.1.5
似乎无法使用国际字符。这是我的输入文件:
Gras Och Stenar Trad - From Moja to Minneapolis DVD [G2007DVD] 7812 | X
<br>
Gras Och Stenar Trad - From Möja to Minneapolis DVD [G2007DVD] 7812 | Y
我知道我可以使用tr删除国际字符。首先,有没有办法只使用sed?
sed
对于非ASCII文本的设置不是很好。但是,您可以在perl
中使用(几乎)相同的代码,并获得所需的结果:
perl -pe 's/.*\| //' x
我认为,如果文件的输入编码与环境的首选编码不同,就会出现错误 示例:中的
是UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
ISO-8859-1不能解释为UTF-8,解码输入文件失败。这种奇怪的匹配可能是由于sed试图恢复,而不是完全失败
答案基于Debian Lenny/Sid和sed 4.1.5。这个提示非常有用。这个问题似乎已经用GNU sed解决了(在版本4.2.2上测试)。
perl -pe 's/.*\| //' x
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
$ 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