/ / बैश स्क्रिप्टिंग: एक चर का उत्पादन संपादित करें - लिनक्स, बैश, स्क्रिप्टिंग

बैश स्क्रिप्टिंग: एक चर के आउटपुट को संपादित करें - लिनक्स, बैश, स्क्रिप्टिंग

मैंने फ़ाइल के कुछ डेटा को पढ़ा, केवल दो कॉलमों के लिए grep का उपयोग किया और आउटपुट को एक चर में पुनर्निर्देशित किया।

मेरी लिपि इस तरह दिखती है:

#!/bin/bash
cat hosts.cfg | grep "address|host_name" | sed -e "s/<address>//g"  | while read line; do
echo $line | sed "s/host_name//g" | sed -r "s/s+//g" ;
done

आउटपुट कुछ इस तरह दिखता है:

Host1
xx.xx.xx.xx
Host2
xx.xx.xx.xx

समस्या यह है कि मेजबानों और ips को एक फ़ाइल में नहीं, बल्कि एक सरणी में सहेजा जाना चाहिए!

आउटपुट इस तरह दिखना चाहिए:

Host1(tab)xx.xx.xx.xx

Host2(tab)xx.xx.xx.xx

उत्तर:

जवाब के लिए 0 № 1

आप उपयोग कर सकते हैं awk:

echo $output | awk "NR%2{printf $0"t";next;}1"

किसी भी कमांड आउटपुट को बचाने के लिए, इसे बैकटिक्स या नए (लेकिन कम पिछड़े संगत) $ (कमांड) स्टाइल प्रतिस्थापन में लपेटें। उदा .:

result=`echo $output | awk "NR%2{printf $0"t";next;}1"`

उत्तर № 2 के लिए 1

आप प्रक्रिया प्रतिस्थापन की तलाश कर रहे हैं। $(command), या पुरानी शैली में `रों।

(क्षमा करें, यह कैसे काम करना चाहिए इसका वर्णन मेरे लिए आपके कोड के संशोधित संस्करण को दिखाने के लिए पर्याप्त नहीं है)


जवाब के लिए 0 № 3

का उपयोग करते हुए sed "N;s/n/t/g"

परिवर्तन

Host1
xx.xx.xx.xx
Host2
xx.xx.xx.xx

सेवा मेरे

Host1(tab)xx.xx.xx.xx
Host2(tab)xx.xx.xx.xx

जवाब के लिए 0 № 4

आप तेजी से आउटपुट प्राप्त करने के लिए "सेट" का उपयोग कर सकते हैं

exg:

मेरे पास फ़ाइल best2 है,

 # cat best2
Host1 xx.xx.xx.xx Host2 xx.xx.xx.xx

एक स्क्रिप्ट बनाएं: tabcheck.sh

 # cat tabcheck.sh
#!/bin/bash
out=$(cat best2)
set $out
echo -e "$1t$2n$3t$4"

# ./tabcheck.sh
Host1   xx.xx.xx.xx
Host2   xx.xx.xx.xx

यदि आप शिफ्ट कमांड का उपयोग करते हैं (आमतौर पर केवल नौकमांड लाइन तर्क को स्थितिगत मापदंडों का उपयोग करके पहुँचा जा सकता है। शिफ्ट कमांड प्रत्येक तर्क को बदलने के द्वारा कमांड लाइन तर्कों को नौ से अधिक तक पहुँच प्रदान करता है।) साथ ही।

धन्यवाद।