Заменить соответствие пути файла содержимым файла на пути с помощью 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 содержит в первой команде, чтобы увидеть, является ли путь неправильным?

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 , сделает трюк. Результат команды заменяет пространство шаблона.

  • Хотите найти две строки подряд с не менее n символами
  • Как заменить слово уникальным префиксом и суффикс?
  • Сед не работает
  • Удаление второго и последнего символов в каждой строке - с помощью sed
  • Как выбрать 30 файлов и сделать кучу sed команд на них
  • Значение {n; s / ... g;} в команде sed
  • sed - печать и отделение
  • Sed для сохранения строк (строк) заголовка (строк) + соответствующих строк
  • Как я могу использовать переменные при выполнении sed?
  • Использование sed для разблокировки полей в pdf
  • Использование sed для извлечения текста между двумя тегами
  • Linux и Unix - лучшая ОС в мире.