bash

2012-02-04 14 views
11

में किसी अन्य शब्द के साथ एक शब्द को बदलें, मैं एक ऐसे पाठ में सभी शब्दों को बदलना चाहता हूं जो बोर्न शैल में किसी अन्य शब्द से मेल खाते हैं। उदाहरण के लिए:bash

hello sara, my name is sara too. 

हो जाता है:

hello mary, my name is mary too. 

किसी को भी मेरी मदद कर सकते हैं?
मुझे पता है कि grep समान शब्द ढूंढते हैं लेकिन मैं उन्हें दूसरे शब्द से बदलना चाहता हूं।

उत्तर

9

शुद्ध बैश वाक्य रचना:

before='hello sara , my name is sara too .' 
after=${before//sara/mary} 
echo $after 

या एसईडी वाक्य रचना:

sed 's/sara/mary/g' <<< $before 
echo $after 

उत्पादन:

hello mary , my name is mary too . 
+1

'$ {s // sara/mary}' और 's/sara/mary/g'' में भ्रम से बचने के लिए इनपुट स्ट्रिंग को' s' के अलावा कुछ और बेहतर नाम दिया जाएगा। – galath

6

आप उस के लिए sed उपयोग कर सकते हैं:

$ sed s/sara/mary/g <<< 'hello sara , my name is sara too .' 
hello mary , my name is mary too . 

या आप जगह में एक फ़ाइल को बदलना चाहते हैं:

# sed 's/sara/mary/g' FILENAME 

इच्छा उत्पादन:

$ cat FILE 
hello sara , my name is sara too . 
$ sed -i s/sara/mary/g FILE 
$ cat FILE 
hello mary , my name is mary too . 
3

आप एसईडी उपयोग कर सकते हैं परिणाम। एस /// निर्माण का अर्थ है नियमित अभिव्यक्तियों का उपयोग करके खोज और प्रतिस्थापित करें। अंत में 'जी' का अर्थ है "हर उदाहरण" (केवल पहले नहीं)।

तुम भी पर्ल का उपयोग करें और जगह में फ़ाइल को संपादित कर सकते हैं:

# perl -p -i -e 's/sara/mary/g;' FILENAME 
+0

sed भी यथा-स्थान-संशोधन कर सकते हैं। –

+0

नए, जीएनयू द्वारा, हां। –

0

आप sed उपयोग करने के लिए शब्द

प्रतिस्थापित करने की आवश्यकता
1

या awk

awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too."