要将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之外:)?
答案 0 :(得分:1)
如果你不是迫切需要cmd
解决方案,你可以使用VBScript(甚至是PowerShell,尽管这仍然很少是默认值)。
我在这里阅读你的正则表达式有点麻烦,但它看起来像这样(如果我错了就纠正我):
some-number // $RESOURCE$ ...something-else...
在这种情况下,您可以将findstr
与for /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
将导致包含第三个令牌的所有内容,无论它是否具有分隔字符。
希望这有助于(至少一点点)。