/ / Sed - रेगेक्स, बैश, सेड का उपयोग करके txt फ़ाइल की लाइन # 1 पर एक चर डालें

Sed - regex, bash, sed का उपयोग कर txt फ़ाइल के पंक्ति # 1 पर एक चर डालें

मेरे पास निम्नलिखित बैश है:

#!/bin/bash
if ["$#" -ne "1"]; then
echo "Usage: `basename $0` <HOSTNAME>"
exit 1
fi

IPADDR=`ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev`
sed -i -e "1i$IPADDR   $1" /etc/hosts

लेकिन जब मैं cat /etc/hosts:

$IPADDR

मैं ऐसे मुद्दों से कैसे निपट सकता हूं?

उत्तर:

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

आपकी समस्या यह है कि एकल उद्धरणों के अंदर चर " शेल द्वारा "टी का विस्तार नहीं किया गया है, लेकिन अपरिवर्तित छोड़ दिया गया है। चर का उपयोग करने के लिए आप डबल उद्धरण का उपयोग करना चाहते हैं " या बस उद्धरण छोड़ दें यदि वे यहां की तरह अनावश्यक हैं, उदा।

sed -i -e "1i"$IPADDR"   "$1"" /etc/hosts

ऊपर की लाइन में $IPADDR तथा $1 उद्धरणों के बाहर हैं और शेल द्वारा विस्तारित किया जाएगा इससे पहले कि तर्क फीड किए जा रहे हैं sed.


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

एकल उद्धरण का मतलब है कि स्ट्रिंग isn "t को एक चर के रूप में प्रक्षेपित किया गया है।

#!/bin/bash
IPADDR=$(/sbin/ifconfig | head -2 | tail -1 | cut -d: -f2 | rev | cut -c8-23 | rev)
sed -i -e "1i${IPADDR}   ${1}" /etc/hosts

मैंने कमांड भी किया $(...) आदत से मजबूर!