在win32上进行高级grep(/ perl)式文本文件处理

时间:2010-08-02 16:49:12

标签: windows makefile cmd

要将GNU makefile移植到(非cygwin)win32平台,我正在寻找一种方法来扫描源文件,例如'1234 // $ RESOURCE $“my_image.ico”',然后再附加到格式为'1234 ICON“my_image.ico”'的资源文件中。使用perl可以这样完成:

perl -nle 'print "$1 ICON $2" if /([0-9]+)\s*\/\/\s*\$RESOURCE\$\s*(\".*\")\s*$$/'

在Windows上,刚接近的东西是findstr,但这只允许匹配,而不是以替代形式输出。我只想简单地替换它之间的字符串常量就可以了。

关于如何实现这一目标的任何线索,除了在发行版中包含我自己的perl / sed.exe之外:)?

1 个答案:

答案 0 :(得分:1)

如果你不是迫切需要cmd解决方案,你可以使用VBScript(甚至是PowerShell,尽管这仍然很少是默认值)。

我在这里阅读你的正则表达式有点麻烦,但它看起来像这样(如果我错了就纠正我):

some-number // $RESOURCE$ ...something-else...

在这种情况下,您可以将findstrfor /f结合使用,这可以对输入进行标记:

for /f "usebackq tokens=1,2* delims=/ " %%a in (`findstr ... file`) do echo %%a ICON %%c

其中%%c将是第三个(和最后一个)令牌(分隔符为空格,/)和%%a第一个。

我对Perl没有任何线索所以现在这很多猜测。快速测试:

> for /f "usebackq tokens=1,2* delims=/ " %a in ('123      //   $RESOURCE$ abc def') do @echo %a ICON %c

123 ICON abc def

上面2*选项中的tokens将导致包含第三个令牌的所有内容,无论它是否具有分隔字符。

希望这有助于(至少一点点)。