Замените одну строку на STDIN в Makefile

Предполагается, что одна цель Makefile отвечает за:

  • захват вывода $ perl Markdown.pl src/index.md ( $ perl Markdown.pl src/index.md to html)
  • используя эту строку для замены одной строки, что-то вроде CONTENT происходящего из файла src / template.html. Нет другой строки с этой строкой в ​​template.html.

Какой элегантный способ достичь этого?

2 Solutions collect form web for “Замените одну строку на STDIN в Makefile”

Как сказал arcege, не изменяйте фактический исходный файл. Во всяком случае, это намного проще с awk :

 target: awk '{if($$0=="CONTENT"){system("perl Markdown.pl src/index.md")}else{print}}' src/template.html > build/template.html 

Вы можете поместить этот код awk в скрипт, если хотите, чтобы линия выглядела немного чище. (Если вы это сделаете, измените $$0 на $0 , это необходимо, потому что в противном случае make-файл интерпретирует его)

 target: awk -f convert.awk src/template.html > build/template.html 

Одно из правил заключается в том, что вы не изменяете исходные файлы в сборке, поэтому никаких изменений на месте. Используйте каталог «build» или что-то подобное.

 template_markdown: @mkdir -p build cp -p src/template.html build (echo /CONTENT/c; perl Markdown.pl src/index.md; echo .; echo w) | ed - build/template.html 

Это должно заботиться о любой ситуации, когда perl Markdown.pl не испускает период («.») Сам по себе.

  • Игнорировать разделитель, присутствующий внутри кавычек
  • Добавить что-то в каждый список в файле
  • Использование sed для удаления разделителей цифр, заключенных в кавычки и кавычки из CSV?
  • Как я могу использовать sed или ex для замены блока (многострочный код) новым блоком текста (кода)?
  • Как заменить определенный текст на соответствующий номер строки с помощью sed?
  • Введите количество совпадений и количество строк совпадения
  • Sed заменить алфавит на верхний регистр после периода
  • sed: портативное решение для соответствия «любому персонажу, но новой строке»,
  • Заменить пробелы командой sed и regexp, не работающими
  • Использовать sed для добавления символа в n-й позиции соответствующей строки
  • Замена строк с помощью словаря
  • Linux и Unix - лучшая ОС в мире.