2010-03-31 16 views
7

मैं पाठ फ़ाइलों की निर्देशिका के माध्यम से रिकर्सिव रूप से खोज करना चाहता हूं और foo की प्रत्येक घटना को bar के साथ प्रतिस्थापित करना चाहता हूं। इसे पूरा करने का सबसे आसान तरीका क्या है?रिकर्सिवली खोजने और बदलने का सबसे आसान तरीका?

मुझे कल्पना है कि grep एक पंक्ति में नौकरी करेगा, लेकिन मुझे इसका एक उदाहरण नहीं मिल रहा है।

मैं ओएस एक्स में काम कर रहा हूँ

+0

आप ** स्वयं फ़ाइलों के भीतर फाइल या foo के नाम foo ** बारे में बात कर रहे हैं? – Robusto

+0

क्षमा करें, स्पष्ट। कृपया फाइलों के भीतर। –

+0

superuser.com –

उत्तर

10

जीएनयू

find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +; 
3

grep केवल उन्हें संशोधित करने के लिए नहीं, चीजों को खोजने लिए किया जाता है पाते हैं।

एक grep- जैसे इंटरफ़ेस के साथ संशोधनों के लिए, आप आमतौर पर sed का उपयोग करेंगे। अपने आप से, sed किसी भी प्रकार की रिकर्सन का समर्थन नहीं करता है - यह केवल एक समय में एक फ़ाइल पर काम करता है। इसे जोड़ने के लिए, फ़ाइलों को संशोधित करने के लिए फ़ाइलों को ढूंढने के लिए आप आमतौर पर find का उपयोग करते हैं, फिर फ़ाइल को संशोधित करने के लिए sed का आह्वान करें।

0

एक अच्छा मुफ्त टेक्स्ट एडिटर है जो इस तरह की चीज को आसानी से और आसानी से करेगा: TextWrangler

+0

कूल पर निर्भर करता है। मैं इसे अपने सर्वर पर कैसे इंस्टॉल करूं? –

+0

मान लीजिए कि यह एक ओएस एक्स सर्वर है तो बस सामान्य तरीके से डाउनलोड और इंस्टॉल करें। यदि यह हेडलेस है तो वीएनसी या रिमोट डेस्कटॉप का उपयोग करें। बेशक आपको सर्वर पर इसे इंस्टॉल करने की भी आवश्यकता नहीं हो सकती है - यदि आप स्थानीय रूप से ओएस एक्स मशीन का उपयोग कर रहे हैं और अपने सर्वर से फाइल सिस्टम बढ़ रहे हैं तो आप स्थानीय स्तर पर टेक्स्टवॉंगलर इंस्टॉल कर सकते हैं और खोज कर सकते हैं और अपनी स्थानीय मशीन से बदल सकते हैं नेटवर्क। –

2

zsh

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

मुझे 'sed: 1: "**/*। Txt" मिलता है: अमान्य कमांड कोड * '। –

+0

आप इसे गलत कर रहे हैं। और/या zsh में नहीं। – wRAR

+0

अगर फू और बार पथ हैं तो '/' को कैसे स्कैप करें? – rraallvv

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