Замените несколько строк в файле другим командой.

Вопрос или проблема

Я могу найти все файлы в директории с определённым именем с помощью команды find:

find . -name hello.mk

В каждом файле hello.mk мне нужно заменить строки 9 и 10 на одну строку, как показано ниже:

9:    HELLO_LATEST = $(shell \
10:     curl -f -s https://api.github.com/repos/org/repo/releases | jq -r 'map(select(.prerelease)) | .[0].tag_name')

на

9: HELLO_LATEST = $(shell curl -s https://api.github.com/repos/org/repo/releases  | grep tag_name | cut -d\" -f4)

и я хочу сделать это на месте. Как я могу это осуществить в bash?

Ответ или решение

Чтобы заменить строки 9 и 10 в файлах hello.mk на одну строку в командной оболочке bash, вы можете использовать комбинацию команд find, sed и -exec. Вот как это можно сделать:

  1. Находим файлы: Сначала мы используем команду find, чтобы найти все файлы с именем hello.mk в текущем каталоге и его подкаталогах.

  2. Замена строк: Используем sed для выполнения замены непосредственно в файлах. Мы укажем sed заменить строки 9 и 10 на новую строку.

Вот пример команды, которая выполняет описанные действия:

find . -name hello.mk -exec sed -i '9s/.*/HELLO_LATEST = $(shell curl -s https:\/\/api.github.com\/repos\/org\/repo\/releases  | grep tag_name | cut -d\" -f4)/; 10d' {} +

Объяснение команды:

  • find . -name hello.mk — ищем все файлы с именем hello.mk в текущем каталоге и подкаталогах.
  • -exec ... {} + — для каждого найденного файла выполняем команду.
  • sed -i '...' — используем sed для редактирования файлом на месте (-i).
  • 9s/.*/.../ — заменяем строку 9 на новую.
  • 10d — удаляем 10-ю строку.

Примечания:

  • Убедитесь, что в вашем случае путь к репозиторию в URL-адресе и используемые команды curl и grep совпадают с вашими требованиями.
  • Проверьте результаты замены, чтобы убедиться, что все прошло гладко.
  • Рекомендуется создать резервные копии файлов перед выполнением массовых замен, чтобы избежать потери данных.

Таким образом, вы сможете заменить строки 9 и 10 на нужную строку в каждом файле hello.mk в вашей директории.

Оцените материал
Добавить комментарий

Капча загружается...