存在未识别字符时sed不匹配模式

存在未识别字符时sed不匹配模式,sed,special-characters,Sed,Special Characters,我试图从匹配的任何一行的文件中删除/和行尾之间的所有内容 因此,我正在做: sed-i-e's://.$::g'文件 它几乎可以完美地工作。除了这行写着这些特殊字符的讨厌的行,它没有被碰过 //日期� � � 所有者� � � � � � �简短说明 我不知道那些角色是什么,我也不在乎。 为什么*与这些字符不匹配?文件(本例中为iso-8859-1)和操作系统(本例中为UTF-8)之间的编码不一致很容易导致问题 将输入文件转换为系统默认值UTF8。有几个实用程序可以做到这一点。一个是iconv。

我试图从匹配的任何一行的文件中删除
/
和行尾之间的所有内容

因此,我正在做:

sed-i-e's://.$::g'文件

它几乎可以完美地工作。除了这行写着这些特殊字符的讨厌的行,它没有被碰过

//日期� � � 所有者� � � � � � �简短说明

我不知道那些角色是什么,我也不在乎。
为什么
*
与这些字符不匹配?

文件(本例中为iso-8859-1)和操作系统(本例中为UTF-8)之间的编码不一致很容易导致问题

将输入文件转换为系统默认值UTF8。有几个实用程序可以做到这一点。一个是iconv。尝试:

iconv -f iso-8859-1 -t utf8 file >newfile
然后使用
newfile

在一边
另一个微妙的问题是行尾。如果源文件是
iso-8859-1
,它是否曾在Windows计算机上编辑过?如果是这样的话,它可能有DOS/Windows行结尾,这在与Unix工具一起使用时会导致各种不明显的问题。使用
dos2unix
或类似的实用程序来转换行尾。

它对我来说很好(GNU sed 4.7)。您使用的是什么操作系统和sed?您的sed支持unicode吗?操作系统的默认编码与文件中的编码是否不匹配?@John1024
sed--version GNU-sed version 4.2.1
。。我如何知道我的sed是否支持unicode?我的操作系统默认编码是utf-8。文件编码为iso-8859-1。嗯。有什么建议吗?编码不一致只会带来麻烦。将输入文件转换为系统默认值UTF8。有几个实用程序可以做到这一点。一个是iconv。尝试:
iconv-f iso-8859-1-t utf8 file>newfile
,然后使用
newfile
。如果这些特殊字符是格式错误的多字节编码的结果,它们可能会中断行分析器。对于这个调用,您可以尝试使用C语言环境(单字节)来解决这个问题,比如使用bash的
LC_CTYPE=C sed-i-e's://.*:'file
。谢谢@John1024。您的
iconv
命令工作正常!你能回答这个问题吗@luciole75w设置LC_CTYPE=C没有任何区别(对于该命令或在shell中导出它)。如果它只有一行,则可以使用sed的://.$:g;//\/\\删除它Date/d'文件,不用担心行尾,但显然也有一些注意事项。