Я пытаюсь использовать sed
для сканирования файла и поиска шаблона, затем использовать часть совпавшего шаблона в качестве имени файла и вставить содержимое файла в это место. Я могу заставить большую часть этого работать, но я не могу понять, как использовать обратную ссылку вместо имени файла.
Коротко говоря, необходимо предварительно обработать файл Latex и избавиться от всех \input
команд верхнего уровня, потому что lilypond-book
это глупо™.
# Setup files for example
$ echo "foo\n\\input{file2}\nfoo" > file1
$ echo "bar\nbar" > file2
# Use sed to find and replace latex \input commands
$ sed $'/^\\\\input{\\(.*\\)}$/ {r file2\n d}' file1
foo
bar
bar
foo
Пока все хорошо, но у него жестко закодированное имя файла, и мне нужно использовать результат сопоставления групп выше (часть между разделителями {
и }
) в качестве имени файла. К сожалению, это не работает:
$ sed $'/^\\\\input{\\(.*\\)}$/ {r \\1\n d}' file1
foo
foo
Как можно использовать сопоставленный шаблон в качестве имени файла в подобной ситуации?
решение1
С помощью GNU sed
вы можете сделать что-то вроде:
sed '/^\\input{\(.*\)}$/{s//\1/;s/'\''/&\\&&/g;s/.*/cat<'"'&'/e}"
(то есть создать cat<'the-file'
команду (экранируя кавычки в имени файла, если необходимо) и использовать e
флаг команды s
(который является специфичным для GNU) для ее оценки).