2014-06-06 19 views
8

nehmen wir an, ich habe VariableBash - ersetzen Schrägstrich

DATE="04/Jun/2014:15:54:26".

Ich muss / durch \/ ersetzen, um die Zeichenfolge "04\/Jun\/2014:15:54:26" zu erhalten.

versuchte ich tr Befehl - echo "04\Jun\2014:15:54:26" | tr '\' '\\/'

mit "04\Jun\2014:15:54:26".

Es befriedigt mich nicht. Kann jemand helfen ?

+0

'man tr' Sie würde sagen, warum es nicht funktioniert. Sie könnten 'sed' verwenden. – devnull

+0

Warum nicht DATE in diesem Format erstellen? Auch wenn Sie das Datum vor tr/sed/ect wiederholen und schreiben, warum schreiben Sie es nicht in diesem Format? –

+0

Was versuchen Sie hier? Ersetzen Sie Schrägstriche durch umgekehrte Schrägstriche oder umgehen Sie alle Schrägstriche? Diese Frage könnte etwas Aufräumen erfordern. :) – wojciii

Antwort

4

Verwendung SED für Substitutionen:

sed 's#/#\\/#g' <filename.txt> newfilename.txt 

Sie in der Regel verwenden „/“ anstelle des „#“ aber solange es da ist es keine Rolle spielt.

ich dies auf einem Windows-PC schreibe so hoffe ich es richtig ist, können Sie die Schrägstriche mit einem anderen slash zu entkommen.

Sed erklärt, die „-e“, können Sie die Datei an Ort und Stelle bearbeiten. Sie können -i verwenden, um automatisch Backup zu erstellen.

sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html 
2

hier gehen Sie:

kent$ echo "04/Jun/2014:15:54:26"|sed 's#/#\\/#g' 
04\/Jun\/2014:15:54:26 

Ihre tr Linie nicht korrekt war, können Sie falsch verstehen, was tr tut, wird tr 'abc' 'xyz'a->x, b->y, c->z ändern, nicht abc->xyz Ändern ganze ..

25

Nein muss ein Echo + eine Pipe + sed verwenden.

Eine einfache Substitutionsvariable ist genug und schneller:

echo ${DATE//\//\\/} 

#> 04\/Jun\/2014:15:54:26 
+0

Dies scheint nicht 4.2.25 in Bash zu arbeiten - es ersetzt nur den ersten Schrägstrich. Zum Beispiel: 'FileDirRelativeToProjectRoot = "source \ scripts \ components \ Bildschirm \ picker_view"; echo "$ {FileDirRelativeToProjectRoot/\\ //}" '' druckt Quelle/scripts \ components \ Bildschirme \ picker_view' – GuyPaddock

+0

einfach es herausgefunden, und dieser Ansatz funktioniert. Sie müssen sicherstellen, dass Sie zwei Schrägstriche nach dem Variablennamen verwenden. Also, in meinem Beispiel, $ {FileDirRelativeToProjectRoot // \\ //} '. Ansonsten ersetzt es nur den ersten. Etwas subtil ... – GuyPaddock

+0

Sehr elegant. Liebe es. – deepelement