2012-10-24 18 views
56

यह आसान होना चाहिए: मैं sed को एक शाब्दिक स्ट्रिंग के विरुद्ध चलाने के लिए इनपुट फ़ाइल नहीं चाहता हूं। यदि आपको आश्चर्य है कि क्यों, यह है, उदाहरण के लिए चर में संग्रहीत मूल्यों को संपादित करें, आवश्यक रूप से टेक्स्ट डेटा नहीं।शाब्दिक स्ट्रिंग के साथ sed - इनपुट फ़ाइल

जब मैं कार्य करें:

sed 's/,/','/g' "A,B,C" 

जहां ए, बी, सी शाब्दिक है जो मैं एक को बदलना चाहते हैं ',' बी ',' सी

मैं

Can't open A,B,C 

जैसा कि यह सोचता है कि ए, बी, सी एक फ़ाइल है।

मैं पाइप की कोशिश की यह प्रतिध्वनित करने के लिए:

echo "A,B,C" | sed 's/,/','/g' 

मैं एक शीघ्र मिलता है।

ऐसा करने का सही तरीका क्या है?

उत्तर

85

आप एक एकल उद्धरण संघर्ष है, इसलिए का उपयोग करें:

echo "A,B,C" | sed "s/,/','/g" 

तो उपयोग कर, आप भी कर सकते हैं (<<< एक here-string है):

sed "s/,/','/g" <<< "A,B,C" 

नहीं बल्कि

sed "s/,/','/g" "A,B,C" 

क्योंकि sed बहस के रूप में फ़ाइल (ओं) की अपेक्षा करता है जाहिर (रों)

संपादित:

अगर आप या किसी अन्य लोगों का उपयोग करें:

echo string | sed ... 
6

वर्क्स आप की तरह हैं: एक में

echo "A,B,C" | sed s/,/\',\'/g 
2
वैरिएबल का उपयोग

मेरे संस्करण बैश स्क्रिप्ट:

एक खोजें ny backslashes और आगे slashes के साथ प्रतिस्थापित करें:

input="This has a backslash \\" 

output=$(echo "$input" | sed 's,\\,/,g') 

echo "$output" 
संबंधित मुद्दे