Windows cmd эквивалент команды sed - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь написать сценарий cmd для анализа версии Java из команды java -fullversion. Я могу получить такую ​​версию: 1.6.0_45, 1.7.0_60, 1.8.0_212, 11.0.4. Я хотел бы вернуть версии как 6, 7, 11. Как вы можете видеть, не все они появляются перед первой точкой.

Я нашел следующую команду sed, которая работает и хотела бы узнать эквивалент Windows cmd:

sed '/^1\./s///'

1 Ответ

1 голос
/ 24 октября 2019

Здесь есть несколько частей, некоторые из которых на самом деле не очень приятны:

  1. Получить вывод Java в переменной

    for /f tokens^=2^ delims^=^" %%v in ('java -fullversion 2^>^&1') do set "version=%%v"
    

    Это сохраняет толькочасть между кавычками, в моем случае 11.0.4+11.

  2. sed -подобная часть, которая довольно проста:

    if "%version:~0,2%"=="1." set version=%version:~2%
    

    В основном просто "если первые два символа 1., обрежьте их`.

  3. обрежьте все, начиная с первого .:

    for /f "tokens=1 delims=." %%v in ("%version%") do set version=%%v
    

    При этом снова используетсяfor /f для разбора и токенизации и сохраняет только первый токен.

Обычно в эти дни вы также можете использовать PowerShell:

"$(java -fullversion 2>&1)" -replace '.*?([\d.]+).*','$1' -replace '^1\.'
#  ^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
#   Invoke Java and          Replace everything but the    sed equivalent
#   capture stderr           version
...