2012-08-10 15 views
12

मेरे पास लगभग 100 .txt फ़ाइलें हैं जिनमें सादे पाठ होते हैं। किसी भी तरह, कुछ डेटा दूषित हो गया है और उसे ढूंढने/प्रतिस्थापित करने की आवश्यकता है।क्या मैं टर्मिनल से कई .txt फ़ाइलों में खोज/प्रतिस्थापित कर सकता हूं?

मुझे पात्रों की खोज करने की आवश्यकता है '' और इसे एक लंबे डैश के साथ प्रतिस्थापित करें: '-'।

क्या टर्मिनल में कमांड के साथ इसे जल्दी करने का कोई तरीका है?

मेरी निर्देशिका में .txt फ़ाइलें के नाम क्रमिक रूप से गिने जा रहे हैं: 1.txt, 2.txt, आदि

धन्यवाद!

+0

संभव [डुप्लिकेट] (http://stackoverflow.com/q/ विस्तार के साथ एक बैकअप फ़ाइल बनाने के लिए 838480 9/148680) – chb

+0

कमोडो संपादित करें (http://www.activestate.com/komodo-edit) में "फ़ाइलें खोजें/बदलें" सुविधा है। मैक, विंडोज और लिनक्स के लिए यह एक मुफ्त संपादक है। – jsherk

उत्तर

34

जीएनयू sed:

sed -i 's/--/—/g' *.txt 

OSX बीएसडी sed:

आप बैकअप फाइल एक्सटेंशन निर्दिष्ट करने के लिए की जरूरत है। .txt.bak:

sed -i '.bak' 's/--/—/g' *.txt 

पूरी तरह से, फ़ाइलों को प्रतिस्थापित करने के लिए एक खाली विस्तार निर्दिष्ट करें:

sed -i '' 's/--/—/g' *.txt 
+0

उसने ऐसा किया! धन्यवाद एक गुच्छा – Lizza

+0

@ कैस्पर: खुशी है कि मैं मदद कर सकता हूं :-) – Steve

+0

"ओएसएक्स पर" शीर्षक का क्या महत्व है? क्या पहला उदाहरण ओएस एक्स पर काम नहीं करता है? [सहायता @ उत्तर पढ़ें।] ओह। क्या आप पहले उदाहरण के बारे में कुछ कह सकते हैं और यह अलग क्यों है और किस प्लेटफॉर्म पर यह अलग है? इसके अलावा, ओएस एक्स के लिए विशिष्ट दूसरा उदाहरण है या यह बीएसडी पर लागू होता है? –

3

sed -i 's/--/–/g' *.txt काम करना चाहिए। -ised पर ध्वज इसे स्थान पर फ़ाइलों पर कार्य करता है, s विकल्प के लिए खड़ा है, और g इसे उसी पंक्ति पर पैटर्न की कई घटनाओं को प्रतिस्थापित करता है। अधिक जानकारी के लिए sed के दस्तावेज़ देखें।

संपादित करें: यह जीएनयू/लिनक्स पर काम करता है; यह पता चला है कि वाक्यविन्यास ओएसएक्स पर थोड़ा अलग है (टिप्पणियां और स्वीकृत उत्तर देखें)।

+0

तो मैं कमांड लाइन के लिए काफी नया हूं ... मैंने बस अपनी कमांड को टर्मिनल में फाइलों के साथ निर्देशिका में डाल दिया और इसे प्राप्त किया: sed: 1: "base1.txt": अपरिभाषित लेबल 'ase1.txt'। कोई विचार? धन्यवाद! – Lizza

+0

मुझे अभी एहसास हुआ कि फ़ाइलों को वास्तव में मूल प्रश्न में वर्णित तरीके से नामित नहीं किया गया है। उन्हें base1.txt, base2.txt, आदि नाम दिया गया है। यह चीजों को कैसे बदलता है? – Lizza

+0

@ कैस्पर: यह नहीं करता है। '* .txt' वर्तमान कार्यशील निर्देशिका में प्रत्येक' .txt' फ़ाइल को पढ़ता है – Steve