У меня есть файл с некоторыми include
строк, и я хотел бы прочитать путь к файлу и заменить эту строку содержимым файла.Как заменить строку другим содержимым файла в Makefile
например. замените строку <!-- include(path/filename.txt) -->
с содержанием path/filename.txt
# meta info
- a
- b
# included files
<!-- include(path/filename.txt) -->
Мой Makefile:
expand-includes:
@echo "Expand all included file"
perl -pi -e "s/<!--\s?include\((.+)\)\s?-->/`cat $$1`/" input.txt
Захват группы выглядит получить пустой $$1
и сценарий зависает. Я что-то пропустил?
Update: Remove $ (скорлупа)
во-первых, рецепт запускается оболочкой в любом случае, так почему бы вам нужно '$ (SHELL ...)'? во-вторых, '$ 1' пуст, потому что оболочка расширяет его, потому что находится внутри строки с двумя кавычками (подставляя значение первого позиционного параметра, который пуст). также, если я помню что-нибудь о Perl (что я не обязательно, заметьте), вы хотите использовать '\ 1', чтобы ссылаться на« регистр соответствия №1 »-' 'cat $$ 1'' заменит содержимое файла с именем '$ 1' (которое, чтобы повторить, является пустой строкой), не уверен, что там идея. –
Почему вы используете 'cat $$ 1', тогда как с опцией' -i' в ** Perl ** изменить на месте? –
Спасибо за @MichaelLivshin и @ k-five. Я хотел бы заменить строку соответствующим содержимым файла, поэтому требуется опция -i. Я пробовал какое-то время, и найти e-модификатор - это именно то, что мне нужно. '' 'perl -pi -e 's/ /' cat $$ 1'/e' input.txt '' ' –