2010-08-26 10 views
22

मैं यूनिक्स सोलारिसएसईडी मैं + क्या SOLARIS

में निम्नलिखित एसईडी आदेश का उपयोग करें SOLARIS मशीन से में एक ही विकल्प

sed -i '$ s/OLD/NEW/g' test   
sed: illegal option -- i 

कर सकते हैं कुछ एक है विचार क्या सोलारिस में अवैध विकल्प (जगह में लिनक्स में "मैं" विकल्प मैं एक ही प्रभाव के साथ सोलारिस में अन्य विकल्प)

लिडिया जरूरत

उत्तर

17

आप द्वारा -i के व्यवहार अपने आप को दोहराने के लिए की आवश्यकता होगी परिणामों को एक अस्थायी फ़ाइल में संग्रहीत करना और फिर मूल फ़ाइल को temp फ़ाइल के साथ बदलना। यह सुरुचिपूर्ण प्रतीत हो सकता है लेकिन यह सभी sed -i कवर के तहत कर रहा है।

sed '$ s/OLD/NEW/g' test > test.tmp && mv test.tmp test 

आप परवाह आप इसे थोड़ा और अधिक मजबूत बना सकता है mktemp का उपयोग करके हैं:

TMP=$(mktemp test.XXXXXX) 
sed '$ s/OLD/NEW/g' test > "$TMP" && mv "$TMP" test 
+0

awk से शायद अन्य विकल्प मैं अन्य फाइल करने के लिए फ़ाइल स्थानांतरित करने के लिए नहीं कर सकते – lidia

+0

किसी भी आदेश है कि "स्थान पर" एक फ़ाइल को संशोधित करता है वास्तव में क्या कर रहा है यह मेकअप कॉपी-move- शफल कॉपी करें। कुछ विशेष मामलों को छोड़कर आप एक फ़ाइल को जगह में संशोधित नहीं कर सकते हैं। यदि 'एमवी' काम नहीं करता है तो शायद 'सीपी' होगा। –

+1

आपका आदेश संशोधित फ़ाइल की अनुमतियों को भी संशोधित करेगा। 'sed -i' ऐसा नहीं करेगा। 'Mv' के बजाय' cat' और 'rm' का उपयोग करना बेहतर हो सकता है:' && cat "$ TMP"> test && rm "$ TMP" '। – ceving

20

यह बिल्कुल sed मैं के रूप में ही नहीं है, लेकिन मैं एक ऐसी ही समस्या हुई। आप इसे perl का उपयोग करके कर सकते हैं:

perl -pi -e 's/find/replace/g' file 

प्रतिलिपि/चाल केवल एक ही फाइल के लिए काम करता है। यदि आप किसी निर्देशिका और उप-निर्देशिकाओं में प्रत्येक फ़ाइल में कुछ टेक्स्ट को प्रतिस्थापित करना चाहते हैं, तो आपको कुछ ऐसा करने की ज़रूरत है जो इसे जगह में करे। आप पर्ल साथ ऐसा कर सकते हैं और पाते हैं:

find . -exec perl -pi -e 's/find/replace/g' '{}' \; 
+0

सर्वश्रेष्ठ ड्रॉप-इन प्रतिस्थापन। धन्यवाद। – woot

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