अमान्य कमांड कोड।, पीरियड्स से बचने के बावजूद, सेड का उपयोग करके


187

एक मौजूदा ग्राहक के लिए सीवीएस का उपयोग करने के लिए मजबूर किया जा रहा है और रिमोट रेपो के लिए पता बदल गया है। मेरे स्थानीय कोड में दूरस्थ पता बदलने का एकमात्र तरीका एक पुनरावर्ती खोज और प्रतिस्थापित करना है।

हालाँकि, सेड कमांड के साथ मैं काम करने की उम्मीद करूँगा:

find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;

मुझे हर फ़ाइल के लिए एक त्रुटि मिलती है:

sed: 1: ".//file/path ...": invalid command code .

मैंने सेड मैच / रिप्लेसमेंट में पीरियड्स से बचने की कोशिश की है, लेकिन इससे कुछ हल नहीं होता।

जवाबों:


475

यदि आप OS X पर हैं, तो शायद इसका sed कमांड से कोई लेना-देना नहीं है। के OSX संस्करण पर sed, -iविकल्प एक extensionतर्क की उम्मीद करता है ताकि आपकी कमांड वास्तव में ओएस के रूप में पार्स होextension तर्क के और फ़ाइल पथ को कमांड कोड के रूप में व्याख्या की जाए।

जोड़ने का प्रयास करें -eस्पष्ट रूप से तर्क और देने ''के लिए तर्क के रूप में -i:

find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;

देखें इस


41
यदि आप 10 मिनट बिताते हैं जैसे मैंने अंतर
ढूंढा

9
यह सवालRE error: illegal byte sequence MacOS पर जवाब देता है।
जोनासवथेरिन

11
मैंने -i के पैरामीटर के रूप में एक खाली स्ट्रिंग '' का उपयोग किया और वह काम किया, जैसेsed -i '' 's/blah/xx/g'
पियरे ह्यूस्टन

25
मेरे लिए, इस तरह से मेरी सभी फाइलों का बैकअप बनाने के -eबाद : "foo.txt" -> "foo.txt-e"। जाहिर है कि मैं जो चाहता था , वह था , अर्थात् बैकअप फ़ाइलों को बदल नहीं। -ised-i ''
mdup

3
मेरे लिए भी यही समस्या है। यह कई फ़ाइलों को समाप्त करने के परिणामस्वरूप -i -eसंयुक्त findहै -e-e-e-e-e-e-e
आकांक्षा

39

आप बस एक तर्क देना भूल गए -i। बस -iकरने के लिए बदल जाते हैं -i ''

बेशक इसका मतलब है कि आप नहीं चाहते कि आपकी फाइलें वापस आ जाएं; अन्यथा पसंद के अपने विस्तार की आपूर्ति -i .bak


5

OS X पर कुछ भी खराब बिलिन सेड को पर्याप्त बनने में मदद नहीं करता है। समाधान है:

brew install gnu-sed

और फिर sed के बजाय gsed का उपयोग करें, जो कि उम्मीद के मुताबिक काम करेगा।


1
इस उत्तर के लिए धन्यवाद, जिसने मेरे लिए बहुत काम किया! लिनक्स और मैक दोनों पर काम करते हुए, मैं बहुत ही निकट से संबंधित लोगों के बीच रहस्यमय अंतर सीखने की तुलना में एक परिचित उपकरण तक पहुंच पसंद करूंगा।
स्टीफन शंक

3

शायद आपके नए डोमेन में हैं /? यदि हां, तो सेपरेटर के अलावा अन्य का उपयोग करके देखें /में sed, उदाहरण के लिए #, ,आदि

find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \;

s///चर प्रतिस्थापन या किसी अन्य अप्रत्याशित व्यवहार से बचने के लिए दोहरे उद्धरण के बजाय एकल उद्धरण में संलग्न करना भी अच्छा होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.