2012-10-12 56 views
5

此問題接續於another question about selectively appending lines from one file to anotherWindows命令行/ shell - 丟棄UTF-8 BOM

我正在使用的正則表達式在匹配行以保持/放棄時工作得很好。問題在於該文件是由一堆其他文件組成的,有時候我希望作爲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:]; }之類的內容。

+1

..這就是爲什麼perl應該隨每個操作系統一起提供;-) – 2012-10-12 01:32:18

+0

你有沒有想過使用Powershell而不是vanilla命令解釋器?做這樣的事情將是微不足道的。 Windows shell不太喜歡Unicode。 – kprobst

+0

我將在Visual Studio的生成前/生成後事件中運行腳本。根據http://stackoverflow.com/questions/6500320/post-build-event-execute-powershell,運行PowerShell腳本可能是一個選項。它會覺得有點像外部解決方案。 – Kache

回答

1

我結束了通話的PowerShell在Windows CMD:

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