2016-07-25 21 views
0
manipuliert werden muss

Dies ist ein String Ich möchte Teil eines Dateinamens Ich möchte manipulieren und schreiben:Schreiben in eine Datei + Dateiname ist eine Zeichenfolge, die leicht

$ echo "$val1" 
"$29.95 Carryover Plan 1GB" 

Das ist, was ich will der Dateiname soll sein (Leerzeichen werden mit Unterstrich und Anführungszeichen entfernt) und NAME_ werden am Anfang hinzugefügt und _NAME am Ende hinzugefügt.

$ echo "NAME_"$val1"_NAME" | sed s/" "/_/g | sed s/'"'/''/g 
NAME_$29.95_Carryover_Plan_1GB_NAME 

Und das versucht, mich Testdaten auf die betreffende Datei

$ a="NAME_"$val1"_NAME" | sed s/" "/_/g | sed s/'"'/''/g && echo "test123" > "$a" 

zu schreiben, aber es kommt nicht heraus, wie ich will "$29.95_Carryover_Plan_1GB"

$ ls -lth 
total 44M 
-rw-r--r-- 1 kevin.smith mkpasswd 8 Jul 25 16:08 "$29.95_Carryover_Plan_1GB" 

Wie kann ich schreiben zu der Datei und für den Dateinamen zu seinNAME_$29.95_Carryover_Plan_1GB_NAME ??

Antwort

1
a="NAME_"$val1"_NAME" | sed s/" "/_/g | sed s/'"'/''/g 

tut nicht, was ich erwarte, dass Sie es wollten. Sie müssen tatsächlich echo die Variable:

a="$(echo "NAME_"$val1"_NAME" | sed s/" "/_/g | sed s/'"'/''/g)" 

Oder ein bisschen schöner (IMO):

a="$(echo "NAME_${val1}_NAME" | sed 's/ /_/g;s/"//g')" 

Oder wenn Sie laufen zsh statt bash:

a="NAME_${${val1// /_}//\"/}_NAME" 
+0

' $ a = "NAME _ $ {$ {val1 ///_} //" /} _ NAME " -sh: NAME _ $ {$ {val1 ///_} // \" /} _ NAME: schlechte Ersetzung' das ist aqi gefragt [hier] (http://stackoverflow.com/questions/38559463/how-to-replace-spaces-with-underscore-and-doublequotes-mit- nothing-in-bash/38561193 # 38561193) und wurde gesagt, dass es nicht möglich sei. Kannst du erklären, warum ich eine "schlechte Vertretung" bekomme? – HattrickNZ

+1

Ich habe vergessen zu beachten, das funktioniert nicht in bash. Jetzt behoben. – viraptor

+0

tks dafür, führt mich zu einem anderen [q] (https://en.wikipedia.org/wiki/Z_shell) – HattrickNZ