Замените одну строку на 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 не испускает период («.») Сам по себе.

  • Обрезать текст без цикла
  • Сопоставьте целое слово (IP-адрес) с помощью `sed`
  • Как разобрать этот вывод и поместить его в массив?
  • Отдельные «дублированные строки» по пустой строке
  • Как разбить несколько пробелов на один с помощью sed?
  • поиск и замена с помощью grep (not sed)
  • `sed: -e выражение # 1, char 4: неизвестная команда:` но окончательные строки в порядке
  • sed -e 's / ^ //' не работает для первой строки
  • эмулировать хвост с sed
  • sed или awk, чтобы заменить строку между шаблоном (преобразовать абсолютный путь в относительный)
  • Разбить заголовок в файле и на основе заголовка заменить значение в файле
  • Linux и Unix - лучшая ОС в мире.