2

Sed を使用して、template.php ファイル内で JS ファイルの名前の UNIX タイムスタンプ部分を見つけ、それを現在のタイムスタンプに置き換えたいと思います。古いタイムスタンプは異なるため、数値に一致する正規表現が必要です。

これが私がこれまでに持っているものです:

TimPeterson$ current_timestamp=date +%s
TimPeterson$ sed -i "" "s/myJS-[0-9]*\([0-9]\+\).js/myJS-$current_timestamp.js/" template.php

問題を明確にするために、JSファイル名で一致させる必要があるものは次のようになります(数字の部分は可変です):

myJS-1361297970.js

ただし、[0-9]*\([0-9]\+\)正しくありません。

4

3 に答える 3

3

このままのコードは、いくつかの理由で機能しません。それを比較してください:

current_timestamp=`date +%s`
sed -ie "s/myJS-[0-9]\+\.js/myJS-${current_timestamp}.js/g" template.php

コメント:

  1. date +%scurrent_timestampプログラムの実行の出力を変数に取得するには、逆引用符で囲む必要があります
  2. このパターン[0-9]\+は、一連の数字ですべての名前をキャプチャするのに十分です。
  3. 変数名を区切るために中括弧を追加しました
  4. 改行以外の任意の文字に一致.jsするメタ文字と混同しないように、部分のドットを保護しました。.
  5. 同じ行にいくつかの置換を生成するために、置換に「g」修飾子を追加しました。
于 2013-02-19T21:16:37.940 に答える
2
  • $(..)コマンドを実行する必要があります。current_timestamp=$(date +%s)

  • グループ化する必要はありません。単にmyJs-[0-9]\+\.js十分です。

  • sedがサポートしている場合は-r、エスケープを節約できます。

于 2013-02-19T21:20:35.880 に答える
2

を使用する1つの方法perldate +%sシェルから結果を得るために置換部分を評価します。最後のtrコマンドは、コマンドによって追加された追加の改行を削除しますqx<...>

perl -i.bak -lpe 's/(myJS-)\d+(\.js)/$1 . qx<date +%s> . $2/eg && tr/\n//d' infile
于 2013-02-19T21:20:50.783 に答える