Заменить соответствие пути файла содержимым файла на пути с помощью sed

Я хочу написать короткий сценарий развертывания, который вводит содержимое javascript-файлов в один файл html. Эти js-файлы в настоящее время объявлены как:

<script src="js/jquery-1.8.2.js"></script> <script src="js/jquery.rotate-2.2.js"></script> <script src="js/underscore.js"></script> <script src="js/backbone.js"></script> <script src="js/backbone.dualstorage.js"></script> <script src="js/favourites.js"></script> <script src="js/menuItem.js"></script> <script src="js/companies.js"></script> <script src="js/lectures.js"></script> <script src="js/banquette.js"></script> <script src="js/menu.js"></script> <script src="js/application.js"></script> <script src="js/main.js"></script> 

У меня есть сценарий отладки, который почти делает то, что я хочу:

 sed -r -e '/<script src="(.*)">/r \1' -e '/<script src="(.*)">/d' index.html 

Результатом запуска этой команды sed с указанным выше вводом является пустая строка. Я не считаю, какая часть \ терпит неудачу. Это потому, что ссылки не работают вне команд s?

Бег:

 sed -r -e 's/<script src="(.*)">/\1/' 

Результаты в:

 js/jquery-1.8.2.js</script> js/jquery.rotate-2.2.js</script> js/underscore.js</script> And so on ... 

Поэтому очевидно, что регулярное выражение соответствует правильному.

Есть ли способ отладить то, что \ 1 содержит в первой команде, чтобы увидеть, является ли путь неправильным?

  • Измените строку с помощью sed
  • Использование sed один раз для поиска / замены разных строк
  • Удалить неизвестное количество строк, кроме последней строки
  • sed редактировать текстовый блок: не жадный матч
  • sed - печать и отделение
  • Sed: поиск и замена шаблона, который обертывается в следующую строку
  • sed - как правильно использовать границу слова \ b?
  • Значение {n; s / ... g;} в команде sed
  • 2 Solutions collect form web for “Заменить соответствие пути файла содержимым файла на пути с помощью sed”

    Это не работает. Как вы говорите, обратные ссылки не работают вне команд s .

    Вы можете сделать это с помощью awk или perl с:

     perl -pe 's{<script src="(.*?)">}{ local$/;open F,"<$1";"<script>".<F>}ge' 

    Команда GNU sed e может быть решением:

     sed ' /<script src="/ { s/.*<script src="\([^"]\+\)">.*/cat \1/ e } ' index.html 

    e будет выполнять содержимое пространства шаблонов в качестве команды, если без аргумента, поэтому переписать согласованную строку как команду оболочки, например cat js/foobar.js , сделает трюк. Результат команды заменяет пространство шаблона.

    Interesting Posts

    Есть ли состояние состояния безопасности?

    Как применяются разрешения файлов для вновь созданных файлов?

    netcat работает не так, как ожидалось, когда отсоединяется от консоли с nohup (Ubuntu / Debian 64bit)

    Конфигурация Grub для отдельных корневых и загрузочных разделов

    Является ли ctime на linux всегда больше или равно mtime?

    Linux Wifi Потребление высокой мощности

    Не удается установить LibreOffice 5 в Linux Mint 17.2, правило политики не учитывается?

    Как использовать uswsusp для режима ожидания / спящего режима с помощью systemd? (Debian)

    Как разрешить любому пользователю (mysql, apache и т. Д.) Использовать любой TCP или UDP-порт?

    Konqueror случайным образом показывает одинаковые результаты поиска

    Сжатие mtdblock с «tar» перед отправкой через TFTP

    Ошибка при попытке установить пакет с помощью dpkg

    Безопасно ли устанавливать KDE вместе с Gnome?

    Автоматизация резервных копий выполняется из сценария bash в Linux правильным способом

    Изменить подсказку терминала Ubuntu

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