5

这个问题是关于选择性地将行从一个文件附加到另一个文件的另一个问题的延续。

我正在使用的正则表达式可以很好地匹配要保留/丢弃的行。问题是该文件是由一堆其他文件组成的,有时我想要保留的行开始是 UTF-8 编码文件的第一行。这意味着该findstr命令返回如下内容:

LineToKeep that started out as the first line in its file
LineToKeep another
LineToKeep more lines
LineToKeep that started out as the first line in its file
LineToKeep more

保证除 BOM 字节外,该行将始终以“LineToKeep”开头。我怎样才能摆脱这三个 UTF-8 BOM 字节,因为这些 windows shell 命令无法正确处理它们?

我希望有一种方法可以将它们删除,或者可能对findstr上一个问题的命令进行修改。

由于我知道每一行必须以“LineToKeep”或“∩╗┐LineToKeep”开头,我认为有一种方法可以计算if (Line[3:10] == "LineToKeep") { Line = Line[3:]; }每一行的内容。

4

2 回答 2

2

unix 世界的另一种替代方法是就地删除文件中的 BOM:

sed -zbi "1s/^\xEF\xBB\xBF//" filepath

这需要从https://github.com/mbuilov/sed-windows下载适用于 windows的 sed 4.4,它提供了防止行尾损坏的工作选项-z-b

于 2017-12-15T14:16:13.380 回答
1

我最终在 Windows cmd 中调用 PowerShell:

powershell . "Get-ChildItem . | Select-String '^LineToKeep' | foreach {$_.Line}"
于 2012-10-12T19:22:44.137 回答