2010-10-25 13 views
24

Ich habe Variable, die Wert "abcd.txt" hat.So lesen Sie die Ausgabe von sed in eine Variable

ich vor den ".txt" in einer zweiten Variable speichern will alles ersetzen, die ".txt" mit ".log"

Ich habe kein Problem den gewünschten Wert Echo:

a="abcd.txt" 

echo $a | sed 's/.txt/.log/' 

Aber wie bekomme ich den Wert "abcd.log" in die zweite Variable?

Danke,

Roger

Antwort

45

können Sie verwenden command substitution als:

new_filename=$(echo "$a" | sed 's/.txt/.log/') 

oder weniger empfohlen Graviszeichen Weg:

new_filename=`echo "$a" | sed 's/.txt/.log/'` 
+1

noch besser: 'new_filename = "$ (echo "$ a" | sed 's/.txt/log /')"' (in Bash Paare '' '' innerhalb der Befehlssubstitution passt immer noch). – Benoit

+0

"Weniger empfehlenswert"? Vielleicht für Bash, aber die Shell wurde nicht angegeben, so kann es die einzige Option sein :-) –

+0

@Chris: Du hast Recht .. – codaddict

9

Sie Backticks verwenden können, um die Ausgabe zu vergeben eines Befehls an eine Variable:

logfile=`echo $a | sed 's/.txt/.log/'` 

Das geht davon aus, dass Sie Bash verwenden.

Alternativ für dieses spezielle Problem hat Bash Musteranpassungs Konstrukte selbst:

stem=$(textfile%%.txt) 
logfile=$(stem).log 

oder

logfile=$(textfile/%.txt/.log) 

Das% im letzten Beispiel sicherzustellen, wird nur die letzte .txt ersetzt wird.

+0

Danke für die Tipps. –

3

wenn Sie Bash haben/ksh

$ var="abcd.txt" 
$ echo ${var%.txt}.log 
abcd.log 
$ variable=${var%.txt}.log 
+0

Danke, aber das bringt mich nirgendwohin ... Ich konnte schon echo ... das Problem ist, ich möchte es in eine Variable bekommen. –

+1

Wenn Sie es in Variable bekommen wollen, einfach zuweisen? Deklarieren und Zuweisen von Variablen sind sehr grundlegende Dinge in Shell Scripting, ich bezweifle, dass Sie nicht wissen, wie es geht. – ghostdog74

Verwandte Themen