Используйте sed для замены номера версии в файле package.json

Это часть моего файла package.json

{
    "name": "org-team-module",
    "version": "1.1.0-snapshot",
    "description": "Some description",
    "scripts": {
        "start": "npm run build && npm run copy-static-assets && npm run serve",
        "build": "rimraf dist && npx tsc && echo npm run lint",

Я хочу заменить версию на определенное значение, скажем, 1.2.0-snapshot

Это то, что у меня есть до сих пор;

sed -nE -i 's/(^\s*"version": ")(.*?)(",$)/\11.2.0-snapshot\3/p' test.json

Однако, когда я добавляю флаг -i для замены; весь файл заменяется искомым значением. то есть все содержимое файла после замены

        "version": "1.2.0-snapshot",

Как я могу просто заменить эту конкретную строку в файле

Я бы предложил просто изменить аргументы на -E -i и удалить /p, например. sed -E -i 's/(^\s*"version": ")(.*?)(",$)/\11.2.0-snapshot\3/' test.json

vdavid 12.12.2020 22:18
sed не подходит для работы с файлами JSON; ваш скрипт завершится ошибкой, если "version" и его значение не находятся в одной строке (не обычная ситуация, но определенно допустимый JSON). Вместо этого я предлагаю использовать jq. Он знает, как анализировать и генерировать JSON, и скрипт становится меньше и понятнее.
axiac 12.12.2020 22:22
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
10
2
3 172
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

sed не подходит для работы с файлами JSON; ваш скрипт завершится ошибкой, если "version" и его значение не находятся в одной строке (не обычная ситуация, но определенно допустимый JSON).

Вместо этого я предлагаю использовать jq. Он знает, как анализировать и генерировать JSON, и скрипт становится меньше и понятнее.

Заменить значение version фиксированным значением так же просто, как:

jq '.version = "1.2.0-snapshot"' package.json

Он не изменяет исходный файл, а выводит измененный JSON на экран. Ваш скрипт может перенаправить свой вывод во временный файл, а затем переместить временный файл поверх исходного файла, например:

jq '.version = "1.2.0-snapshot"' package.json > /tmp/package.json
mv /tmp/package.json package.json

Другие вопросы по теме