2010-10-25 14 views
24

में sed के उत्पादन में पढ़ने के लिए मैं चर जो मूल्य "abcd.txt" है की है।कैसे एक चर

मैं एक दूसरे चर में ".txt" से पहले सब कुछ स्टोर करने के लिए, की जगह चाहते हैं ".txt"".log" साथ

मुझे कोई समस्या नहीं वांछित मान गूंज है:

a="abcd.txt" 

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

लेकिन मैं मूल्य कैसे मिलता है "abcd.log" दूसरे चर में?

धन्यवाद,

रोजर

उत्तर

45

आप उपयोग कर सकते हैं command substitution के रूप में:

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

या उससे कम सिफारिश बैकटिक रास्ता:

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

भी बेहतर KSH: 'new_filename =" $ (गूंज "$ एक" | एसईडी के/.txt/लॉग/') "' (में बैश जोड़े की '" "अंदर कमांड प्रतिस्थापन अभी भी मेल खाता है)। – Benoit

+0

"कम अनुशंसित"? हो सकता है कि पार्टी के लिए है, लेकिन खोल, निर्दिष्ट नहीं किया गया है तो यह एकमात्र विकल्प :-) –

+0

@Chris हो सकता है: आप ठीक कह रहे हैं .. बहुत बहुत – codaddict

9

आप उत्पादन आवंटित करने के लिए उपयोग कर सकते हैं बैकटिक एक चर के लिए एक आदेश की:

logfile=`echo $a | sed 's/.txt/.log/'` 
है कि आप बैश का उपयोग कर रहे संभालने है

। यह सुनिश्चित करना होगा केवल पिछले .txt बदल दिया जाता है

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

या

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

पिछले उदाहरण में%:

वैकल्पिक रूप से, इस विशेष समस्या के लिए बैश पैटर्न मिलान निर्माणों ही है।

+0

युक्तियों के लिए धन्यवाद। –

3

अगर आप बैश है/

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

धन्यवाद, लेकिन यह मेरे लिए कहीं भी नहीं मिलता है ... मैं पहले से ही प्रतिध्वनित करने के लिए कर रहा था ... समस्या मैं इसे एक चर में प्राप्त करना चाहते है। –

+1

यदि आप इसे चर में प्राप्त करना चाहते हैं, तो बस इसे असाइन करें? घोषित करने और बताए चर शेल पटकथा लेखन में बहुत ही बुनियादी सामान कर रहे हैं, मैं संदेह आप इसे कैसे करना पता नहीं है। – ghostdog74

संबंधित मुद्दे