2017-01-18 3 views
1

私のUnix AIXでは、PowerCenterからのポストセッションを実行するシェルスクリプトを使用して、パラメータファイル内の日付をシステム日付に置き換える必要があります。パラメータファイルの日付をシステム日付に置き換えてください

私はSEDを使用して文字列変数を置き換えることはできますが、日付を使用して問題が発生しています。

デリミタとしてスラッシュの代わりにコンマを使用しようとしました。テストファイルの内容は次のようになります。

$$TESTFIELD=12/29/2016 14:57:51 

私が感じたsedコマンドは動作するはずだった:私はtestfile.txttmp.$$を移動するだろうが、結果は次のエラーを投げた

sed -e "s,^\($$TESTFIELD=\).*,\1'date +"%D %T"'," testfile.txt > tmp.$$ 

た後:

sed: 0602-404 Function s,^\(14680298TESTFIELD=\).*,\1'date +%D cannot be parsed. 
+0

あなたは二重引用符を使用しているので、 'sed -e" s ... "は' $$ TESTFIELD'をその値に展開します。 – fedorqui

+0

'sedの日付形式を変更する方法 '(http://stackoverflow.com/a/34080390/1983854)を見て、' sed'の中から外部コマンドを実行する方法を知りたいかもしれません。基本的に '-e'フラグを使う必要があります。 – fedorqui

+0

おそらく、 'Now = $(date +"%D%T "); $$ '$$' –

答えて

2

あなたは、単一引用符を使用するか、sedコマンドで$をエスケープする必要があります。そうでなければ、シェルは$TESTFIELDを展開します。この場合の最初のメッセージをお勧めします。

sed -e 's,^\($$TESTFIELD=\).*,\1'\''date +"%D %T"'\'',' 

あなたの質問はかなり不明です。あなたは現在の日時でのファイルの日時を交換したい場合は、使用します。

sed -e 's,^\($$TESTFIELD=\).*,\1'"$(date +"%D %T")"',' 
+0

このアプローチは現在の日付/時刻を挿入するのではなく、実際にdat + "%D%T"を挿入します: $$ TESTFIELD = '日付+ "%D%T"' –

+0

あなたの質問を読んで、それが欲しいと思われるのです – hek2mgl

+0

私の更新を確認してください – hek2mgl

0
sed -e 's,^\($$TESTFIELD=\).*,\1'"$(date +"%D %T")"',' 

これは完全に働きました。結果: $$ TESTFIELD = 01/18/17 13:14:59

関連する問題