Заменить соответствие пути файла содержимым файла на пути с помощью 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 конвертировать 4 пробела в 2
  • Удалить неизвестное количество строк от * до пустой строки
  • Может ли sed удалить «двойные» символы новой строки?
  • Что случилось с этой командой sed?
  • Как заменить строку строкой, содержащей слэш с sed?
  • как удалить ctrl F в файле unix
  • 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 - лучшая ОС в мире.