Как я могу использовать обратную ссылку вместо имени файла в sed?

Я пытаюсь использовать sed для сканирования через файл и поиска шаблона, затем использовать часть сопоставленного шаблона в качестве имени файла и вставить содержимое файла в этом месте. Я могу заставить большинство из них работать, но я не могу понять, как использовать обратную ссылку вместо имени файла.

Краткая версия заключается в том, что необходимо предварительно обработать латексный файл и избавиться от всех команд верхнего уровня \input Becuaase lilypond-book – это Stupid ™.

 # 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\nd}' file1 foo bar bar foo 

До сих пор так хорошо, но у него есть жестко закодированное имя файла, и мне нужно использовать результат группового совпадения выше (часть между разделителями { и } ) в качестве имени файла. К сожалению, это не работает:

 $ sed $'/^\\\\input{\\(.*\\)}$/ {r \\1\nd}' file1 foo foo 

Как я могу использовать сопоставленный шаблон в качестве имени файла в таком сценарии?

One Solution collect form web for “Как я могу использовать обратную ссылку вместо имени файла в sed?”

С помощью GNU sed вы можете сделать что-то вроде:

 sed '/^\\input{\(.*\)}$/{s//\1/;s/'\''/&\\&&/g;s/.*/cat<'"'&'/e}" 

(это построить команду cat<'the-file' (при необходимости избегая кавычек в имени файла) и использовать флаг e команды s (которая является специфичной для GNU) для оценки этой команды).

Interesting Posts

Не удается смонтировать SD-карту после жесткого отключения

Автоматическая дистанция с символическими источниками

Смонтировать домашний раздел при входе пользователя

«Ожидание конфигурации сети» при загрузке

Как включить ярлыки для программы установки gnome и приложений для винных приложений в dmenu?

Где UNIX ищет информацию для входа? например, где он находит, что делать?

Запуск исполняемого файла как службы на порту

Как настроить компакт-диски с поддержкой доверия

yaourt -Syu не работает в arch linux

Проблема с сетью – только одна машина не может получить доступ к веб-странице на другом компьютере

Почему моя система redhat 5.11 имеет так много процессов ext4-dio-unrit?

линии с уникальной контрольной суммой

Упаковка только определенного подмножества встроенных файлов

Как я могу автоматически прекратить отключение шпатлевки

GNU Экранные странные символы при нажатии

Linux и Unix - лучшая ОС в мире.