2012-02-20 11 views
8

मुझे जावा संपत्ति मान को अद्यतन करने के लिए sed के साथ एक साधारण एक लाइनर चाहिए। जानते हुए भी क्या जावा संपत्ति की वर्तमान सेटिंग है बिना, और यह खाली हो सकता है)जावा गुण फ़ाइल में संपत्ति को अद्यतन करने के लिए sed का उपयोग करना

से पहले

example.java.property=previoussetting 

के बाद

example.java.property=desiredsetting 
+0

[क्या आप की कोशिश की है?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

उत्तर

7

मान लिया जाये कि लिनक्स ग्नू sed, 1 समाधान होगा

संपादन बच निकला '।' वर्ण अर्थात केंट

द्वारा सही टिप्पणी प्रति s/example\.java.../
replaceString=desiredsetting 
sed -i "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties 

यदि आपका sed -i सम्मान नहीं करता है, तो आप tmp फाइलों का प्रबंधन करने के लिए है, यानि कि

sed "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties > myTmp 
    /bin/mv -f myTmp java.properties 

मुझे आशा है कि इस मदद करता है।

+0

-1 हालांकि ओ पी है इस जवाब को स्वीकार किया। 'डॉट' बच निकला नहीं है, इसलिए इसका मतलब है 'कोई भी चरित्र' यह फ़ाइल में गलत संपत्ति को बदल सकता है। यह खतरनाक है! – Kent

+0

@ केंट: खतरनाक एक मजबूत शब्द की तरह लगता है। लेकिन मेरी पोस्ट को बेहतर बनाने में मदद के लिए धन्यवाद। Hoofamon: कृपया अपने जावा गुणों में प्रतिस्थापन में सुधार के लिए संशोधित पोस्ट देखें। आप सभी को शुभकामनायें। – shellter

9

यह आपके फ़ाइल अपडेट कर देगा:

sed -i "/property.name=/ s/=.*/=newValue/" yourFile.properties 

यह एक नई फ़ाइल

sed "/property.name=/ s/=.*/=newValue/" yourFile.properties > newFile.properties 

में प्रिंट होगा इस तरह आप कई संपत्तियां हैं

sed -i -e "/property.name.1=/ s/=.*/=newValue1/" -e "/property.name.2=/ s/=.*/=newValue2/" yourFile.properties 

के गुरुओं sed अद्यतन है मुझे दोष दे सकता है क्योंकि यह ऐसा करने का सबसे उचित तरीका नहीं है (उदाहरण के लिए मैं डॉट्स से बच नहीं पाए) लेकिन जब आप पठनीयता को त्यागना नहीं चाहते हैं तो मैं इसे सबसे अच्छा विकल्प मानता हूं।

यहाँ विस्तृत चर्चा है: How do I use sed to change my configuration files, with flexible keys and values?

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