2011-02-22 3 views
5

मैं %20 और %5B तरह प्रतिशत-भाग निकले वर्ण वाली स्ट्रिंग है, और मुझे %20 के लिए \ है जैसे कि यह "सामान्य" वर्ण बदलना चाहते हैं और %5B के लिए।बैश के साथ स्ट्रिंग में प्रतिशत-भाग निकले वर्ण (20%,% 5 ब, ...) की जगह

मैं यह कैसे कर सकता हूं?

उत्तर

8

बैश में निर्मित printf एक विशेष फॉर्मेट स्पेसिफायर (यानी% ख) जो \ x धर्मान्तरित है * * संबंधित मान पर:

$ str='foo%20%5B12%5D' 
$ printf "%b\n" "${str//%/\\x}" 
foo [12] 
+1

ठीक है, धन्यवाद, अगर आप चाहें तो मेरी स्क्रिप्ट यहां है: http: //pastebin.com/jN862wFZ – Dorian

+1

मैंने कुछ मामूली सुधार किए हैं और यहां एक संघीय संस्करण लिखा है: http://pastebin.com/y8KBgVA2 – marco

+0

बहुत बहुत धन्यवाद, लघु संस्करण मेरे लिए बनाए रखना मुश्किल है, इसलिए मैं लंबे समय तक रहता हूं एक। – Dorian

1

अंत में, धन्यवाद आईआरसी चैनल #bash लिए, मैं एक "इतना बुरा नहीं" समाधान पाया:

echo `echo string%20with%5Bsome%23 | sed 's/%/\\\x/g'` 
+0

मुझे नहीं पता कि आसपास के 'इको' आपको क्या खरीदता है। क्या स्ट्रिंग% 20with% 5 गूंज% 23 | sed/s /%/\\\ x/g'' काम नहीं करते? – Thanatos

+1

@ तानाटोस: sed केवल 'string \ 2020% \ x5Bsome \ x23' में 'स्ट्रिंग% 20with% 5 शीर्ष% 23' को बदलता है। इसे 'echo -e' में पास करने का अर्थ यह होगा कि' \ x..' से बचने के लिए सही ढंग से संसाधित किया जाता है। [गायब '-e' और बैकटिक्स को डबल कोट्स में लपेटा जाना चाहिए: 'echo -e" $ (echo string% 20with% 5bome% 23 | sed's /%/\\\ x/g') "'।] – bobbogo

+1

यदि आप किसी फ़ाइल से बदलना चाहते हैं: 'echo \ 'sed's s /%/\\\ x/g' $ file \'> $ newfile' – lolesque

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