2017-01-18 2 views
1

In meiner Unix AIX muss ich das Datum in einer Parameterdatei mit Systemdatum mit einem Shell-Skript ersetzen, die Post-Sitzung von PowerCenter ausgeführt wird.Ersetzen Sie das Datum in einer Parameterdatei mit Systemdatum

Ich kann SED verwenden, um eine Zeichenfolgevariable zu ersetzen, aber mit Datum zu Problem auftreten.

Ich habe versucht, Kommas anstelle von Schrägstrichen als Trennzeichen zu verwenden. Der Inhalt der Testdatei sieht wie folgt aus:

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

Der sed Befehl, den ich fühlte, war funktionieren sollte:

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

Nach dem ich die tmp.$$ zu testfile.txt bewegen, aber die Ergebnisse warf den folgenden Fehler:

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

beachten Sie, dass Sie doppelte Anführungszeichen verwenden, so 'sed -e" s ... "' expandiert '$$ TESTFIELD' auf seinen Wert. – fedorqui

+0

Sie können sich auch die [Wie ändere ich das Datumsformat in sed?] (Http://StackOverflow.com/a/34080390/1983854) ansehen, um zu sehen, wie man einen externen Befehl innerhalb von 'sed' ausführt. Grundsätzlich müssen Sie die '-e'-Flagge verwenden. – fedorqui

+0

Vielleicht: 'Jetzt = $ (Datum +"% D% T "); sed "s, =. * $, = $ Nun," testfile.txt >> tmp. $$ ' –

Antwort

2

Sie müssen einfache Anführungszeichen verwenden oder die $ im sed Befehl zu entkommen. Andernfalls würde die Shell $TESTFIELD erweitern. Ich empfehle die erste in diesem Fall:

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

Ihre Frage ist ziemlich unklar. Wenn Sie die Datetime in der Datei durch die aktuelle Datetime ersetzen möchten, verwenden Sie:

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

Dieser Ansatz fügt nicht das aktuelle Datum/die aktuelle Uhrzeit ein, sondern fügt dat +"% D% T "ein: $$ TESTFIELD = 'Datum + "% D% T"' –

+0

Ihre Frage zu lesen, es sieht so aus, als ob Sie das wollen – hek2mgl

+0

Überprüfen Sie mein Update – hek2mgl

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

Das funktionierte perfekt. Ergebnisse: $$ TESTFIELD = 01/18/17 13:14:59

Verwandte Themen