2010-10-25 32 views
24

içine sed çıktısını okumak için nasıl değer "abcd.txt" sahiptir değişkeni var.değişken

ben yerine ikinci bir değişkende ".txt" önce her şeyi saklamak istediğiniz

".txt" hiçbir problem istenen değeri yankılanan var

".log" ile:

a="abcd.txt" 

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

Ama nasıl değer alırım "abcd.log" ikinci değişkene mi?

sayesinde

Roger

cevap

45

kullanabilirsiniz command substitution olarak:

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

veya daha az önerilir ters tırnak şekilde:

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

daha da iyi ksh: 'new_filename = "$ (echo "$ a" | sed 's/.txt/.log /')"' (Bash çiftleri arasında '' '' 'komutun yerine ikame hala uyumludur. – Benoit

+0

"Daha az tavsiye"? Belki bash için, ama kabuk belirtilmemiş, bu yüzden tek seçenek olabilir :-) –

+0

@ Chris: Sen haklısın .. – codaddict

9

da çıkış atamak için komutu ters tırnak kullanabilirsiniz Bir değişkenin bir komut için:

Eğer Bash kullandığınız farz ediyor
logfile=`echo $a | sed 's/.txt/.log/'` 

. sadece son txt değiştirilir sağlayacaktır

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

veya

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

son örnekte,%:

Alternatif olarak, bu sorun için Bash desen eşleştirme yapıları kendisi sahiptir.

+0

İpuçları için teşekkür ederiz. –

3

Eğer Bash varsa/

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

Teşekkürler, ama bu beni bir yere getirmiyor ... Ben zaten yankılandırabiliyordum ... problemi bir değişkene dönüştürmek istiyorum. –

+1

eğer değişkene geçmek istiyorsanız, onu atamanız yeterli midir? değişkenleri bildirmek ve atamak, kabuk betiğinde çok basit şeylerdir, nasıl yapacağınızı bilmediğinizden şüpheliyim. – ghostdog74