2010-03-26 17 views
24

का उपयोग कर सभी फ़ाइलों में एक विशेष पाठ को प्रतिस्थापित करें, मेरे पास एक नामित जेएस फ़ाइल है जिसे मुझे अपने प्रत्येक PHP पृष्ठ में कॉल करना है। अब मैं उस पुराने नाम को शैल का उपयोग करके नए के साथ बदलना चाहता हूं।एकल लाइन खोल कमांड

sed -i ’s/old/new/g’ * 

लेकिन यह निम्न त्रुटि दे रहा है: - -: क्या iam का उपयोग कर यह है

sed: -e expression #1, char 1: unknown command: 

अब मैं कैसे इस प्रतिस्थापन कर सकते हैं ??

उत्तर

24

शायद कम वर्बोज़ समाधान कर रहे हैं, लेकिन यहाँ हम चले:

for i in *; do sed -i 's/old/new/g' "$i"; done 

मन आप, यह केवल फाइल सिस्टम के मौजूदा स्तर पर काम करेंगे, उपनिर्देशिका में फ़ाइलों को संशोधित नहीं किया जाएगा। साथ ही, आप * .php के साथ * प्रतिस्थापित करना चाहते हैं, या बैकअप बना सकते हैं (बाद में एक तर्क पारित करें, और यह दिए गए एक्सटेंशन के साथ बैकअप देगा)। (0x27) ASCII के बजाय -

ls | grep "php" > files.txt 
for file in $(cat files.txt); do 
    sed 's/catch/send/g' $file > TMPfile.php && mv TMPfile.php $file 
done 
+0

हम्म है के लिए या पाश के बिना। ओएसएक्स पर 'आदेश' की उम्मीद है \ पाठ के बाद \ – jamescampbell

-2

इस प्रयास करें आपके sed कमांड तर्क के आसपास apostrophes।

+2

एलएस/grep/बिल्ली बेकार हैं। '.php में फ़ाइल के लिए; करें ....; किया गया – ghostdog74

+1

बेकार के बारे में नहीं पता - लेकिन यह एक बहुत बदसूरत दृष्टिकोण है, तो तथ्य यह है कि निश्चित अस्थायी फ़ाइल नाम (files.txt, TMPfile.php) का उपयोग करना यदि कोई सहमति है तो तोड़ देगा। – symcbean

3
perl -pi -e 's/old/new/g' *.php 
+0

को OSX 'zsh पर एक त्रुटि मिली: तर्क सूची बहुत लंबी: perl' – jamescampbell

+0

बस zsh OSX पर परीक्षण किया गया और मेरे लिए काम करता है। – radio4fan

40
sed -i.bak 's/old/new/g' *.php 

यह रिकर्सिवली

find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +; 
+0

यह त्रुटि "त्रुटि: अमान्य स्विच" देता है –

8

करने के लिए आप यूनिकोड अक्षर लोप (U2019 दायां एकल उद्धरण चिह्न) का उपयोग कर रहे हैं:

0

यह एक बहुत ही सरल,, या किसी भी संख्या का एक ले देखभाल नेस्ट निर्देशिका

grep -rl oldText [folderName-optional] | xargs sed -i s/oldText/newText/g