2013-02-14 10 views
6

मैं एक खोल स्क्रिप्ट के हिस्से के रूप में इस तरह एक sed आदेश चलाने की आवश्यकताकमांड लाइन तर्क के साथ sed का उपयोग करना?

एसईडी के/ब्रैड/पिट/जी '

मैं एक कमांड लाइन तर्क के रूप में ब्रैड प्रदान करना चाहिए और इस

sed की तरह एक आदेश चला s/$ 1/पिट/जी

इस आदेश से काम कर रहा है, वहीं मैं क्या होगा जानना पसंद है कि उद्धरण हटाने के बिना मैं यह आदेश कैसे कर सकता हूं, क्योंकि मेरे पास प्रतिस्थापन स्ट्रिंग में कुछ सामग्री हो सकती है जिसे उद्धरणों की आवश्यकता होती है।

मुझे उद्धरणों के साथ इतना भरोसा नहीं है और यही कारण है कि मैं देखना चाहता हूं कि चीजें छोटे tweaking के साथ कैसे काम करेंगे?

उत्तर

15

आप कर सकते हैं sed "s/$1/pitt/g" या sed 's/'$1'/pitt/g'

या, यदि कमांड लाइन तर्क एक सरल शब्द, sed 's/'"$1"'/pitt/g' नहीं है।

+0

क्या आप अपना दूसरा बिंदु विस्तृत कर सकते हैं? डबल कोट्स कैसे मदद करेंगे, मेरा मतलब है कि किस तरह के इनपुट की आवश्यकता होगी? – Dude

+0

'एक से अधिक शब्द' जैसे इनपुट। लेकिन अगर इसमें विशेष वर्ण (sed द्वारा व्याख्या) शामिल हैं, तो यह थोड़ा और जटिल हो रहा है। –

+0

हां यही चिंताजनक है :( – Dude

3

आप दो तरह से यह कर सकते हैं कर रहे हैं:

1) का उपयोग दोहरे उद्धरण चिह्नों

sed "s/$1/pitt/g" 

2) एक स्ट्रिंग के रूप आदेश का निर्माण और eval साथ इसे चलाने

SEDCMD="s/$1/pitt/g" 
eval sed $SEDCMD 

eval विधि काम करता है और बहुत लचीला है, लेकिन खतरनाक माना जाता है, क्योंकि यह कोड इंजेक्शन के लिए कमजोर है। यदि आप अपने इनपुट पर भरोसा नहीं करते हैं, तो # 2

अद्यतन: टिप्पणियां सही हैं, eval का उपयोग करने के लिए कोई लाभ नहीं है (मैं हर समय इस तरह से sedal का उपयोग करने के लिए उपयोग किया जाता था, और मैं ' मुझे यकीन नहीं है ....) बाद में उपयोग के लिए तार तारों का निर्माण, हालांकि, शक्तिशाली है: इसलिए मैं एक नया 3 जोड़ दूंगा) और लोगों को

3) स्ट्रिंग के रूप में कमांड का निर्माण करें और 3) फिर उनमें से 1 या अधिक

FOO='s/\(.*\)bar/\1baz/' 
BAR="s/$1/pitt/g" 
sed -e $BAR -e $FOO <infile >outfile 
+2

'eval' * शून्य * लाभों के साथ एक भयानक विचार है। –

+0

यदि आप अपने इनपुट पर भरोसा नहीं करते हैं तो # 1 का उपयोग न करें। यह कोड इंजेक्शन के लिए भी उपयुक्त है। –

+0

@ यह अन्य लड़का: कृपया एक कोड इंजेक्शन उदाहरण –

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