सबसे पहले, सुनिश्चित करें कि आप शेल स्क्रिप्ट्स में नियमित रूप से 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 उद्धरणों के बजाय स्मार्ट उद्धरणों का उपयोग कर रहे हैं।)