2015-08-27 10 views
7

परिवर्तनीय XFILEBASE64 में बेस 64 एन्कोडेड सामग्री है और मैं उस बेस 64 सामग्री के साथ कुछ स्ट्रिंग को प्रतिस्थापित करना चाहता हूं।बेस 64 पारिस्थितिक सामग्री को कैसे से पास किया जाए?

निश्चित रूप से पर्याप्त बेस 64 विशेष वर्णों के साथ पैक किया गया है, और मैंने $ 0000 'को delimiter के रूप में आजमाया है, फिर भी त्रुटि संदेश प्राप्त कर रहा है। कोई सुझाव?

XFILEBASE64=`cat ./sample.xml | base64` 
cat ./template.xml | sed "s$'\001'<Doc>###%DOCDATA%###<\/Doc>$'\001'<Doc>${XFILEBASE64}<\/Doc>$'\001'g" 
> sed: -e expression #1, char 256: unterminated `s' command 

संपादित करें: ऐसा लगता है कि समस्या एसईडी के साथ कोई संबंध नहीं है की तरह, यह बेस 64 आपरेशनों में छिपा हुआ होना चाहिए।

sample.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<a>testsdfasdfasdfasfasdfdasfdads</a>  

समस्या को पुन: करने के लिए:

foo=`base64 ./sample.xml` 
echo $foo | base64 --decode 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<base64: invalid input 
+0

कौन सा ओएस और अंततः LANG? यूनिक्स ओएस और LANG मान के आधार पर अलग-अलग इलाज कर रहे हैं और sed पूरी तरह से पाठ है (ASCII अगर मुझे अच्छी तरह याद है) तो उन कारकों को ईओएल के रूप में व्याख्या किया जाना चाहिए। इसके अलावा हर sed हेक्सा एन्कोडिंग की अनुमति नहीं देता है (ऑक्टल अधिक उपलब्ध लगता है) – NeronLeVelu

+0

ओएस आरएचईएल 7.1 और LANG en_US.UTF-8 है, मुझे नहीं लगता कि हेक्स एक समस्या है यदि मैं हेक्सा डिलीमीटर छोड़ देता हूं और स्थिर स्ट्रिंग के साथ परिवर्तनीय सामग्री को प्रतिस्थापित करता हूं तो यह ठीक है। – user52028778

+0

सही, जवाब देकर मैं अधिक स्पष्ट रूप से समझता हूं कि यह विशेष चार अंदर परिवर्तनीय या टेम्पलेट फ़ाइल की समस्या नहीं है, और आप केवल हेक्स को विभाजक के रूप में शामिल करते हैं – NeronLeVelu

उत्तर

2

समस्या बेस 64 एन्कोडिंग में थी, बेस 64 के -0 0 विकल्प ने चाल बनाई थी।

cat ./sample.xml | base64 -w 0 
2

Base64 केवल तीन विशेष वर्ण (wikipedia) है - आम तौर पर +, / और =। आप उदाहरण के लिए @, , & या ; किसी समस्या के साथ उपयोग कर सकते हैं।

+0

ने एक ही समस्या को प्राप्त करने के साथ प्रयास किया, मुझे लगता है कि समस्या बेस 64 – user52028778

2
Tempo64="$(echo "${XFILEBASE64}" | sed 's/[\\&*./+!]/\\&/g')" 
sed "s!<Doc>###%DOCDATA%###</Doc>!<Doc>${Tempo64}</Doc>!g" ./template.xml 
  • काम करना चाहिए और POSIX शिकायत
+0

सेकेंड सेड में कहीं है अभी भी अनियमित 's' – user52028778

+0

के बारे में शिकायत करता है निश्चित रूप से Tempo64 में एक अनपेक्षित चरित्र पहले सेड क्लास में जोड़ने के लिए। मैं कम से कम '!' भूल जाता हूं (अब सही)। – NeronLeVelu

+0

फिर से वही त्रुटि संदेश – user52028778

1

आदेश

sed "s$'\001'<Doc>###%DOCDATA%###<\/Doc>$'\001'<Doc>${XFILEBASE64}<\/Doc>$'\001'g" 

sed s$'\001'"<Doc>###%DOCDATA%###<\/Doc>"$'\001'"<Doc>${XFILEBASE64}<\/Doc>"$'\001'g 

कहना है कि, $'...' डबल क्ष में के रूप में लिखा जाना चाहिए यूट्स विशेष नहीं हैं।

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