Windows命令行/ shell - 丢弃UTF-8 BOM

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”开头。由于这些Windows shell命令无法正确处理它们,我该如何摆脱这三个UTF-8 BOM字节?
我希望找到一种在原地删除它们的方法,或者修改上一个问题中的findstr命令。
由于我知道每一行必须以“LineToKeep”或“∩╗┐LineToKeep”开头,所以我想有一种计算每一行类似于if (Line[3:10] == "LineToKeep") { Line = Line[3:]; }的方法。

1
这就是为什么Perl应该随每个操作系统一起发布的原因;-) - user166390
你有没有考虑使用PowerShell而不是普通命令解释器?这样做会很轻松。Windows shell不太喜欢Unicode。 - kprobst
我将在Visual Studio的预/后生成事件中运行脚本。根据https://dev59.com/tmw15IYBdhLWcg3wntAQ,运行PowerShell脚本可能是一个选项。虽然这会感觉有点像外部解决方案。 - Kache
2个回答

2

1

我最终在Windows命令提示符中调用了PowerShell:

powershell . "Get-ChildItem . | Select-String '^LineToKeep' | foreach {$_.Line}"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接