以下を含むファイルがあります。
<?php return 0;
Bashで、値0
を現在のタイムスタンプに置き換えます。
私は現在のタイムスタンプを次のように取得できることを知っています:
date +%s
そして、文字列をsed
で置き換えることができます。
sed 's/old/new/g' input.txt > output.txt
しかし、私が望むものを達成するために2つを組み合わせる方法は? sed
およびdate
を含まないソリューションも、シェルツールのみを使用している限り、歓迎されます。
通常、次の構文を使用します。
_sed "s/<expression>/$(command)/" file
_
これは_<expression>
_を探し、command
の出力に置き換えます。
特定の問題については、以下を使用できます。
_sed "s/0/$(date +%s)/g" input.txt > output.txt
_
これにより、ファイルに存在する_0
_がコマンド_date +%s
_の出力に置き換えられます。 $()
のコマンドを解釈するには、二重引用符を使用する必要があることに注意してください。それ以外の場合は、リテラル$(date +%s)
を取得します。
ファイルを自動的に更新する場合は、_-i
_をsedコマンドに追加します:_sed -i "s/...
_。これはインプレース編集と呼ばれます。
この内容のファイルがあるとします:
_<?php return 0;
_
それが返すものを見てみましょう:
_$ sed "s/0/$(date +%s)/g" file
<?php return 1372175125;
_
置換文字列に改行とスペースが含まれている場合は、別のものを使用できます。テンプレートファイルの途中にls -l
の出力を挿入しようとします。
awk 'NR==FNR {a[NR]=$0;next}
{print}
/Insert index here/ {for (i=1; i <= length(a); i++) { print a[i] }}'
<(ls -l) template.file
または
sed '/^Insert after this$/r'<(ls -l) template.file