Dav*_*ave 15 linux sed character internationalization
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的/.*| //'<in
我希望只看到X和Y,因为我要求删除所有字符到'|' 超越它的空间.相反,我得到:
X
Gras Och Stenar Trad - 来自M?ÿ
我知道我可以使用tr删除国际字符.首先,但有没有办法只使用sed?
Tor*_*rek 24
我认为如果文件的输入编码与您的环境的首选编码不同,则会发生错误.
示例:in是UTF-8
$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X
Y
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
ISO-8859-1不能解释为UTF-8,解码输入文件失败.奇怪的匹配可能是因为sed尝试恢复而不是完全失败.
答案基于Debian Lenny/Sid和sed 4.1.5.
小智 10
sed是非常好的非ASCII文本设置.但是,您可以使用(几乎)相同的代码perl并获得所需的结果:
perl -pe 's/.*\| //' x
Run Code Online (Sandbox Code Playgroud)