2012-02-16 11 views
11

मैं एक लंबे समय कैसे UNIXबदलें एक्स

में एक साधारण स्ट्रिंग परिवर्तन करने के लिए के लिए खोज कर रहा हूँ मैं इस स्ट्रिंग है:

theStr='...............' 

और मैं 5 वीं चार बदलने की जरूरत है ए के लिए, यह कैसे किया जा सकता है?

C# में यह इस theStr[4] = 'A'; // Zero based index.

उत्तर

27

आप sed, धारा लाइन संपादक के साथ इस लक्ष्य को हासिल कर सकते हैं:

echo $theStr | sed s/./A/5

सबसे पहले आप पाइप $ theStr के उत्पादन में sed करने के लिए है, जो ए के साथ पांचवें चरित्र को बदल देता है

+0

+1। वास्तव में sed सही उपकरण है। एक तरफ ध्यान दें, यह विशेष संस्करण केवल तभी काम करेगा जब इनपुट स्ट्रिंग में '।' – CodeExpress

+2

नहीं, वास्तव में, '.' चरित्र" डॉट "का प्रतिनिधित्व नहीं करता है, लेकिन यह सभी वर्णों के लिए एक मैच है। अगर मैं डॉट से मेल खाना चाहता था, तो यह '\ .' – jurgemaister

+0

हां लिखता था, मुझे यह नहीं पता था कि जब मैंने इसे लिखा था। यह सही है! – CodeExpress

3

की तरह किया जाता है अगर यह सुंदर है मैं नहीं जानता, या बैश आप की जरूरत का कौन सा संस्करण है, लेकिन

theStr="${theStr:0:4}A${theStr:5}" 

पहले भाग रिटर्न पहले चार अक्षर, तो चरित्र 'ए', और तब सभी 6 एक

9
a="............" 
b="${a:0:4}A${a:5}" 
echo ${b} 

यहाँ के साथ शुरू पात्रों वास्तव में एक नेक tutorial सेंट पर है अंगूठी हेरफेर।

0
[email protected]:~$ echo 'replace A please' | sed 's/^\(.\{8\}\).\(.*\)/\1B\2/' 
replace B please 

उपरोक्त sed कमांड 8th वर्ण कोई फर्क नहीं पड़ता कोई फर्क नहीं पड़ता, इसलिए आपको यह निर्दिष्ट करने की आवश्यकता नहीं है कि ch अभियंता प्रतिस्थापित किया जाना है।

आप उपरोक्त कोड में बस आप चाहते हैं चरित्र क्या साथ बदलना चाहते हैं के साथ

  • बी चरित्र स्थिति के साथ

    • 8 को बदलने के लिए है!

    तो अपने विशिष्ट उदाहरण के लिए यह हो जाता है:

    [email protected]:~$ echo '...............' | sed 's/^\(.\{4\}\).\(.*\)/\1A\2/' 
    ....A.......... 
    

    नहीं बी के बजाय स्ट्रिंग प्रदान करके उल्लेख करने के लिए है कि आप एक तार के साथ एक जगह ले सकता है या कुछ भी नहीं दे रहा है, जहां बी द्वारा एक को नष्ट (\1\2)

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