Пакетное регулярное выражение findstr для извлечения элемента из одной строки - PullRequest
1 голос
/ 09 ноября 2011

Как я могу использовать Microsoft findstr для "grep" элемента из одной строки?

У меня есть строка, которая выглядит примерно так:

<config>test</config><item>some data</item><date>2007-11-02</date><datestart>2007-10-31</datestart><path>d:\test\test\test.txt</path>

Теперь, если я хочу получить содержимое внутри <date> и </date>, как мне написать это регулярное выражение?

Следует отметить, что мне нужно будет ввести команду findstr в цикл for, чтобы сгладить дату и сохранить ее в переменной.

пример:

for /f "Tokens=* Delims=" %%i in ('findstr /r /c:"regex" file.txt') do (
    set date=%%i
    set date=!date:-=!
)

Кроме того, я не хочу полагаться на токены, поскольку они могут различаться.

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Мы можем использовать трюк, чтобы делать то, что вы хотите: после чтения строки в переменной измените <date> и </date> на символ разделителя, которого нет в строке (например, $); затем просто используйте for /F "tokens=2 delims=$", чтобы получить содержимое внутри.

set /P the_line=< file.txt
set the_line=!the_line:^<date^>=$!
set the_line=!the_line:^</date^>=$!
for /F "tokens=2 delims=$" %%i in ("!the_line!") do set date=%%i
set date=%date:-=%
0 голосов
/ 09 ноября 2011

Вы можете использовать регулярное выражение "[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]", которое должно соответствовать вашей дате.

...