मैंने अपनी कक्षाओं को वैश्विक नामस्थान से एक विशिष्ट नेमस्पेस में स्थानांतरित कर दिया है। मैंने कक्षा के नाम भी बदल दिए हैं। मैं अपनी सभी स्रोत फ़ाइलों को परिवर्तित करना चाहता हूं जो इन वर्गों का उपयोग नए प्रारूप में करते हैं। मैं या तो bash
स्क्रिप्ट को सिग्विन पर sed
फ़ाइल या एक पर्ल स्क्रिप्ट निष्पादित करने के बारे में सोच रहा था। मुझे bash
स्क्रिप्ट के साथ परेशानी हो रही है।सी ++ वर्ग नाम बदलने के लिए स्क्रिप्ट
- प्रत्येक स्रोत फ़ाइल के लिए, * सीपीपी और * .hpp, रिकर्सिवली:
यहाँ इस प्रक्रिया मैं प्रदर्शन करने के लिए कोशिश कर रहा हूँ है
- फ़ाइल एक पुराने वर्ग का नाम शामिल है, तो फ़ाइल को कनवर्ट करें।
- के लिए अंत।
Bash
में मेरी समस्या यह पता लगा रही है कि फ़ाइल में पुरानी कक्षा का नाम है या नहीं। मैं हर वर्ग के नाम के लिए एक grep
बयान की सोच रहा था:
for f in `find . -iname \*.[ch]pp`;
do
if [ grep "Field_Blob_Medium" $f -eq 0 || grep "Field_Boolean" ]; then
sed -f conversion.sed $f
fi
done
एक मुद्दा है कि केवल एक आदेश Bash
में हो सकता है अगर बयान, इस वाक्य रचना का उपयोग कर रहा है:
if grep "Field_Unsigned_Short" $f;
तो मैं ऐसा नहीं कर सकते एक तार्किक या grep
एस।
मैं एक नेस्टेड लूप प्रदर्शन कर सकता है, लेकिन मैं पाश के लिए एक Bash
से बाहर कैसे break
पता नहीं है:
OLD_CLASS_NAMES="Field_Blob_Medium Field_Boolean Field_Unsigned_Int"
for f in `find . -iname \*.[ch]pp`;
do
for c_name in $OLD_CLASS_NAMES;
do
if grep $c_name $f then
sed -f convert.sed $f # <-- Need to break out of inner loop after this execution.
fi
done
done
तो मैं कैसे हर स्रोत फ़ाइल है कि कार्रवाई करने के लिए पर सुझाव के लिए देख रहा हूँ पुराने वर्ग के नाम और उन्हें नए में परिवर्तित करें। एक सिगविन Bash
स्क्रिप्ट उदाहरण को प्राथमिकता दी जाती है, हालांकि एक पर्ल स्क्रिप्ट भी स्वीकार्य होगी। इसके अलावा, स्क्रिप्ट को new
फ़ाइल में रूपांतरित सामग्री को लिखने से पहले मूल स्रोत फ़ाइल की बैकअप प्रतिलिपि बनाना चाहिए।
मैं विंडोज एक्सपी और विंडोज विस्टा पर सिगविन चला रहा हूं।
क्या आप सिर्फ एकाधिक regexp के साथ grep का उपयोग नहीं कर सकते? grep -e "Field_Blob_Medium" -e "Field_Boolean" -e "Field_Unsigned_Int" ... ? – lollinus
प्रत्येक संसाधित फ़ाइल का बैकअप बनाने के लिए: sed -i.bak -f convert.sed $ f – lollinus
'lo' 'loops से' ब्रेक 'ब्रेक हो जाता है और आप' अगर प्रोजे || प्रोग || लॉजिकल के लिए प्रोग 'या (लेकिन इस मामले में रेगेक्स विकल्प बेहतर है)। 'ढूंढ' के साथ 'के लिए' आमतौर पर एक बुरा विचार है क्योंकि फ़ाइल नामों में रिक्त स्थान होने पर यह विफल हो जाता है। 'While' में पाइप 'पाइप करना बेहतर है। –