一致するファイルパスをsedパスのファイルコンテンツに置き換えます。

一致するファイルパスを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スクリプトがあります。

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

上記の入力でこのsedコマンドを実行した結果は空の文字列です。 \1のどの部分が失敗するのかよくわかりません。 ■ コマンドの外部では引用が機能しないためですか?

ランニング:

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

しかし、実際にはそうではありません。おっしゃるとおり、逆参照はコマンドの外部では機能しませんs

awkまたはPerlを使用してこれを行うことができます。

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

おすすめ記事