सबसे पहले, सुनिश्चित करें कि आप शेल स्क्रिप्ट्स में नियमित रूप से ascii कोट्स "और '(ascii कोड 0x22और 0x27क्रमशः) का उपयोग कर रहे हैं , क्योंकि आपके पोस्ट में उदाहरण में गैर-मानक उद्धरण वर्ण हैं। यदि आप बारीकी से देखते हैं, तो वे कुछ अलग दिखते हैं। सबसे शायद यह एक अमीर पाठ दस्तावेज़ प्रारूप से कॉपी-पेस्ट त्रुटि है जैसे वर्ड, ऑरोटर, या यहां तक कि एक ब्राउज़र विंडो।
चूंकि आप एक मैक पर हैं, तो आपके पास संभवतः फ्रीबीएसडी कार्यान्वयन है sed, जिस स्थिति में आपको इस तरह से कमांड लिखना होगा:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(यहां प्रति फ़ाइल एक मंगलाचरण चलाने से बचने के +बजाय उपयोग करना )।\;sed
फ़्रीबीएसडी sedमें -iध्वज के कार्यान्वयन में एक तर्क की आवश्यकता होती है: बैकअप फ़ाइल का विस्तार। साथ उदाहरण के लिए -i .bakआदेश बैकअप होगा file1.txtके रूप में file1.txt.bakपहले मूल फ़ाइल में प्रतिस्थापन प्रदर्शन से पहले। रिक्त तर्क ''का उपयोग करने का अर्थ है बैकअप फ़ाइल का उपयोग न करना, जो आपको लगता है कि आप चाहते हैं।
GNU (या NetBSD, OpenBSD, busybox) कार्यान्वयन में यही बात होगी:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
आपकी टिप्पणियों के साथ मेरे उत्तर को बेहतर बनाने के लिए @ @hamat और @Mikel और @ pieter- नस्ल को धन्यवाद ।
-execऔर उसके बाद सब कुछ हटा दें ? क्या यह जावा फ़ाइलों के नाम प्रिंट करता है? (मुझे चिंता है कि आप ASCII उद्धरणों के बजाय स्मार्ट उद्धरणों का उपयोग कर रहे हैं।)