मैं एक स्क्रिप्ट कि .csv फ़ाइलें को साफ, कुछ बुरी अल्पविराम के और बुरे उद्धरण चिह्न निकाल कर लिखा है (बुरा, मतलब है कि वे घर कार्यक्रम में एक को तोड़ने के हम इन फ़ाइलों को बदलने के लिए उपयोग करें) एसईडी का उपयोग कर:मेरी बैश स्क्रिप्ट फाइलों की शुरुआत में <feff> क्यों जोड़ रही है?
# remove all commas, and re-insert the good commas using clean.sed
sed -f clean.sed $1 > $1.1st
# remove all quotes
sed 's/\"//g' $1.1st > $1.tmp
# add the good quotes around good commas
sed 's/\,/\"\,\"/g' $1.tmp > $1.tmp1
# add leading quotes
sed 's/^/\"/' $1.tmp1 > $1.tmp2
# add trailing quotes
sed 's/$/\"/' $1.tmp2 > $1.tmp3
# remove utf characters
sed 's/<feff>//' $1.tmp3 > $1.tmp4
# replace original file with new stripped version and delete .tmp files
cp -rf $1.tmp4 quotes_$1
यहाँ clean.sed है:
s/\",\"/XXX/g;
:a
s/,//g
ta
s/XXX/\",\"/g;
तो यह अस्थायी फ़ाइलें और वाइला हम चाहते हैं कि शब्द "उद्धरण" है कि हम अपने अन्य प्रक्रियाओं के लिए उपयोग कर सकते हैं के साथ शुरू होता है एक नई फ़ाइल को हटा।
मेरा प्रश्न है:
मुझे उस temp फ़ाइल में फेफ टैग को हटाने के लिए एक sed स्टेटमेंट क्यों करना है? मूल फ़ाइल में यह नहीं है, लेकिन यह हमेशा प्रतिस्थापन में दिखाई देता है। पहले मैंने सोचा था कि सीपी इसका कारण बन रहा था, लेकिन अगर मैं सीपी से पहले हटाने के लिए sed स्टेटमेंट डालता हूं, तो यह वहां नहीं है।
कुछ हो सकता है कि मैं सिर्फ याद कर रहा हूँ ...
कृपया 'clean.sed' के लिए स्रोत पोस्ट करें। कौन सी .tmpX फाइलें पहले फेफ में दिखाई देती हैं? – wallyk
0xfeff यूनिकोड बाइट ऑर्डर चिह्न है। सुनिश्चित नहीं है कि यह आपके मामले में क्या जोड़ता है। – Eugene
पहला प्रश्न: आप प्रत्येक जगह $ 1.1st पर इन-प्लेस (sed -i) का उपयोग करने के बजाय ऐसा करने के लिए 4 temp फ़ाइलों को क्यों बनाते हैं? दूसरा: बाइट ऑर्डर मार्कर (फेफ) आपकी प्रक्रिया में कब दिखता है? Clean.sed चलाने के तुरंत बाद क्या यह है? यदि ऐसा है, तो आप उस स्क्रिप्ट को पोस्ट करना चाहेंगे। तीसरा [नाइटपिक]: जब आप सिंगल कोट्स के अंदर होते हैं तो आपको डबल कोट्स से बचने की आवश्यकता नहीं होती है, और आपको कॉमा से बचने की आवश्यकता नहीं होती है। एस /,/","/g '' s/\,/\ "\, \"/g 'से बहुत अधिक पठनीय है। – glomad