расширенная обработка текстовых файлов в стиле grep (/ perl) на win32 - PullRequest
1 голос
/ 02 августа 2010

Чтобы портировать make-файл GNU на (не 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 Ответ

1 голос
/ 09 августа 2010

Вы можете использовать VBScript (или даже PowerShell, хотя это по-прежнему довольно редко по умолчанию), если вам не нужно отчаянно cmd решение.

У меня небольшая проблема с чтением вашего регулярного выражения, но оно выглядит так (поправьте меня, если я ошибаюсь):

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, приведенной выше, приведет к включению всего, начиная с третьего токена, независимо от того, имеет ли он символы-разделители или нет.

Надеюсь, это поможет (хотя бы немного).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...