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

  • Почему «1,4p» выводит все строки, а не только первые четыре?
  • Удаление специальных символов из файла и сохранение разделителя полей
  • как удалить пустые строки из диапазона файлов в оболочке
  • sed строка не соответствует. Зачем?
  • Добавьте ведущие нули, пока все строки перед запятой не состоят из девяти символов и затем вставьте символ каждые три цифры, используя sed
  • заместитель char-to-char с sed
  • Как добавить строку после n-го появления ключевого слова с помощью sed?
  • команда 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 , сделает трюк. Результат команды заменяет пространство шаблона.

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