sed 在存在未识别字符的情况下不匹配模式

sed not matching pattern in presence of unidentified characters

我正在尝试从匹配的任何行上的文件中清除 // 和行尾之间的所有内容。

所以我在做:

sed -i -e 's://.*$::g' file

而且效果几乎完美。除了这个带有这些特殊字符的讨厌的行,它没有被触及。

// Date � � � Owner � � � � � � �Short description

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

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

将输入文件转换为系统默认的 UTF8。有几个实用程序可以执行此操作。一个是 iconv。尝试:

iconv -f iso-8859-1 -t utf8 file >newfile

然后使用newfile.

放在一边

另一个微妙的问题是 line-endings。如果源文件是 iso-8859-1,它是否曾经在 Windows 机器上编辑过?如果是这样,它可能有 DOS/Windows line-endings,这会在与 Unix 工具一起使用时导致各种 non-obvious 问题。使用 dos2unix 或类似的实用程序来转换 line-endings.