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.
我正在尝试从匹配的任何行上的文件中清除 //
和行尾之间的所有内容。
所以我在做:
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.