2016-05-16 17 views
1

Ich möchte den Wert vonWie den Wert des Datums in sed?

date + "%Y%m%d" 

als substituierende Wort geleitet zu werden haben in sed

cat template.html | sed s/\\@\\@DATENUMBER\\@\\@/date +"%Y%m%d"/g 

Aber das ist nicht erlaubt. Wie extrahiere ich den Wert des Datums und übergebe es korrekt?

Antwort

3

Versuchen:

sed "s/@@[email protected]@/$(date +"%Y%m%d")/g" template.html 

Hinweise:

  1. Es besteht keine Notwendigkeit für cat weil sed einen Dateinamen als Argument nehmen.

  2. Wenn der Text, den Sie wie @@[email protected]@ Blicke ersetzen wollen, dann gibt es keine Notwendigkeit für alle, die Schrägstriche: @ ist weder ein Shell-aktive Charakter noch ein Sed-aktiver Charakter und muss nicht entgangen sein.

  3. Wenn der Befehl date ausgeführt werden soll, müssen Sie die Befehlssubstitution $(...) verwenden.

  4. Der gesamte Befehl sed s sollte in Anführungszeichen stehen, damit die Shell das Wort nicht aufteilt.

+0

Danke! Was bedeutet "Worttrennung" in diesem Zusammenhang? – byInduction

+0

Ihre Begrüßung. Für den ursprünglichen Befehl sieht 'sed' keinen vollständigen Ersetzungsbefehl. Stattdessen sieht es als erstes Argument 's/\\ @ \\ @ DATENUMBER \\ @ \\ @/Datum' und als zweites Argument' + "% Y% m% d"/g'. Jedes Mal, wenn Sie etwas haben, das ein Leerzeichen enthält und Sie möchten, dass der Befehl es als einzelnes Argument anzeigt, muss es in Anführungszeichen stehen. – John1024

+0

Weitere Informationen zum Teilen von Wörtern finden Sie beispielsweise in [diese Antwort] (http://stackoverflow.com/a/18498494/3030305). Für eine erweiterte Diskussion, siehe [diese FAQ] (http://mywiki.wooled.org/WordSplitting). – John1024

Verwandte Themen