मैं कॉम्प्लेक्स फ़ाइल में प्लेसहोल्डर स्ट्रिंग्स को ठोस मूल्यों के साथ बदलने का एक तरीका ढूंढ रहा हूं, जिसमें सामान्य यूनिक्स टूल (बैश, सेड, ऑक, शायद पर्ल) हैं। यह महत्वपूर्ण है कि प्रतिस्थापन एक ही पास में किया जाता है, अर्थात्, जो पहले से ही स्कैन किया गया है / प्रतिस्थापित किया गया है उसे दूसरे प्रतिस्थापन के लिए नहीं माना जाना चाहिए। उदाहरण के लिए, ये दो प्रयास विफल होते हैं:
echo "AB" | awk '{gsub("A","B");gsub("B","A");print}'
>> AA
echo "AB" | sed 's/A/B/g;s/B/A/g'
>> AA
इस मामले में सही परिणाम निश्चित रूप से बी.ए.
सामान्य तौर पर, समाधान दिए गए प्रतिस्थापन तारों में से एक के लिए सबसे लंबे समय तक मैच के लिए बाएं से दाएं इनपुट को स्कैन करने के बराबर होना चाहिए, और प्रत्येक मैच के लिए, इनपुट पर उस बिंदु से एक प्रतिस्थापन और जारी रखना (कोई भी नहीं) पहले से पढ़े गए इनपुट और न ही किए गए प्रतिस्थापन को मैचों के लिए माना जाना चाहिए)। वास्तव में, विवरण से कोई फर्क नहीं पड़ता, बस यह कि प्रतिस्थापन के परिणामों को कभी भी दूसरे प्रतिस्थापन के लिए नहीं माना जाता है, पूरे या आंशिक रूप से।
नोट मैं केवल सही जेनेरिक समाधानों की तलाश में हूं। कृपया उन समाधानों का प्रस्ताव न करें जो कुछ इनपुट्स के लिए विफल होते हैं (इनपुट फ़ाइलें, जोड़े को खोजें और बदलें), हालांकि संभावना नहीं है कि वे लग सकते हैं।
tr AB BA
।