关于linux:为什么sed不能使用国际字符,并且如何解决?

关于linux:为什么sed不能使用国际字符,并且如何解决?

Why does sed fail with International characters and how to fix?

GNU sed version 4.1.5似乎因国际字符而失败。 这是我的输入文件:

1
2
3
Gras Och Stenar Trad - From Moja to Minneapolis DVD [G2007DVD] 7812 | X

Gras Och Stenar Trad - From M?ja to Minneapolis DVD [G2007DVD] 7812 | Y

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

当我这样做

1
sed 's/.*| //' < in

我希望只看到XY,因为我已要求删除直到'|'的所有字符以及超出它的空间。 相反,我得到:

1
2
X
Gras Och Stenar Trad - From M? Y

我知道我可以使用tr删除国际字符。 首先,但是有一种方法只能使用sed吗?


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

示例:in是UTF-8

1
2
3
4
5
6
$ 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

1
2
3
4
5
6
$ 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,版本为4.1.5。


对于非ASCII文本,sed的设置不是很好。 但是,您可以(几乎)在perl中使用相同的代码并获得所需的结果:

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


推荐阅读

    linux命令行输入汉字?

    linux命令行输入汉字?,系统,软件,发行,管理,终端,命令,模式,编辑,文件,文本,L

    linux拼接文件命令?

    linux拼接文件命令?,文件,数据,命令,代码,时间,信息,系统,情况,管理,标准,Lin

    linux文件常用命令?

    linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

    linux字符动画命令?

    linux字符动画命令?,工作,系统,地址,信息,命令,目录,工具,时间,标准,基础,Lin

    文件夹排序linux命令?

    文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

    linux打开文件夹命令?

    linux打开文件夹命令?,工作,系统,信息,命令,图片,文件,管理,发行,名字,名称,

    linux上清空文件命令?

    linux上清空文件命令?,系统,命令,文件夹,名字,档案,文件,目录,方法,终端,指

    linux命令拷贝文件?

    linux命令拷贝文件?,系统,文件,命令,目录,情况,源文件,目标,文件夹,选项,语

    linux命令被替换文件?

    linux命令被替换文件?,系统,文件,命令,批量,工具,电脑,工作,保险,实时,字符

    压缩文件夹命令linux?

    压缩文件夹命令linux?,系统,软件,命令,工具,电脑,文件,文件名,格式,选项,目

    字符串查找命令linux?

    字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范

    linux配置文件夹命令?

    linux配置文件夹命令?,地址,系统,工作,信息,命令,标准,服务,名称,位置,文件,l

    linux管理文件的命令?

    linux管理文件的命令?,系统,管理,工作,命令,信息,基础,目录,工具,文件,操作,l

    linux文件链接命令?

    linux文件链接命令?,系统,工作,地址,命令,网络,信息,工具,基础,管理,目录,lin

    linux命令输入格式化?

    linux命令输入格式化?,电脑,设备,系统,管理,位置,环境,名称,数据,磁盘,命令,l

    linux命令文件授权?

    linux命令文件授权?,系统,工具,权限,文件,档案,数字,软件,信息,时间,电脑,lin

    linux删除命令文件夹?

    linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名

    打包文件命令linux?

    打包文件命令linux?,系统,时间,工具,名称,命令,文件,目录,格式,表示,详细信

    linux输入上条命令?

    linux输入上条命令?,系统,命令,工作,电脑,数字,时间,管理,工具,第一,网上,lin