मुझे शुद्ध-खोल के लिए @ रुडो77 से ऊपर कुदोस देना चाहिए (जब तक कि आप प्रिंटफ़ की गिनती नहीं करते हैं) ऊपर उत्तर दें, जो मैं चाह रहा था।
यह इसमें थोड़ा सा जोड़ देता है:
(ए) प्रत्येक 16-बिट चंक में किसी भी अग्रणी शून्य के साथ; तथा
(बी) आईआईडी की शुरुआत में किसी भी आगे के सभी शून्य विखंडू के साथ
... पते की संक्षिप्तता के लिए आम सम्मेलनों के अनुसार।
mac_to_eui64() {
IFS=':'; set $1; unset IFS
echo "fe80::$(printf %x $((0x$1 ^ 2)))$2:${3}ff:fe$4:$5$6" |
sed -E 's/:0+/:/g; s/:{3,}/::/; s/:$/:0/'
}
ध्यान दें कि यदि आप अन्य (मनमाने ढंग से) उपसर्गों के लिए इसका पुनर्निमाण करना चाहते हैं, जिसे आप EUI-64 के बाद से किसी भी दायरे में उपयोग कर सकते हैं (हालाँकि यह सलाह दी जाती है कि इसे गोपनीयता कारणों से वैश्विक पतों के लिए उपयोग न करें), आपको थोड़ी आवश्यकता होगी अधिक जटिल sed स्क्रिप्ट। ऐसा इसलिए है क्योंकि fe80::
उपसर्ग में पहले से ही IID की शुरुआत से सटे तीन शून्य-चक्र (डबल-कोलन के लिए उत्कीर्ण) शामिल हैं। इस प्रकार यहां तक कि अगर IID का पहला हिस्सा ऑल-जीरो है (अर्थात, यदि MAC के साथ शुरू हुआ 02:00
), तो इसे भी बढ़ाया जाएगा। EUI-64 प्रारूप केवल एक और हिस्सा छोड़ देता है जो कि सभी शून्य हो सकता है - अंतिम एक - जो ऊपर की स्क्रिप्ट को एक एकल शून्य के रूप में वापस जोड़ता है। अन्य उपसर्गों को दो कॉलनों के बीच एक शून्य छोड़ने की आवश्यकता हो सकती है।