Bash
और SED
के साथ आगे की स्लैश से बचने के लिए मैं URL के साथ एक जेएस फ़ाइल में दो तारों को प्रतिस्थापित करने की कोशिश कर रहा हूं।sed कमांड
दो यूआरएल जो डाला जाना चाहिए इनपुट एसएएम जब मैं .sh स्क्रिप्ट चलाता हूं।
./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test
हालांकि यह मेरा sed कमान में प्रयोग करने योग्य बनाने के लिए मैं सभी आगे से बचने के लिए है के साथ स्लैश: \\
?
./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test
वे मैक OSX सिएरा पर भाग निकले कर रहे हैं इस SED आदेश काम करता है
APP_URL=$1
API_URL=$2
sed "s/tempAppUrl/$APP_URL/g;s/tempApiUrl/$API_URL/g" index.src.js > index.js
अब अगर मैं पैरामीटर के रूप में बच गए यूआरएल डालने के लिए नहीं करना चाहते, मैं स्क्रिप्ट यह आत्म फ़ॉरवर्ड स्लैश बचना चाहते हैं ।
यह मैं क्या कोशिश की है है:
APP_URL=$1
API_URL=$2
ESC_APP_URL=(${APP_URL//\//'\\/'})
ESC_API_URL=(${API_URL//\//'\\/'})
echo 'Escaped URLS'
echo $ESC_APP_URL
#Echos result: https:\\/\\/hostname.com\\/a\\/index.html
echo $ESC_API_URL
#Echos result: https:\\/\\/hostname2.com\\/test
echo "Inserting app-URL and api-URL before dist"
sed "s/tempAppUrl/$ESC_APP_URL/g;s/tempApiUrl/$ESC_API_URL/g" index.src.js > index.js
पैरामीटर ही लेकिन इस मामले में एसईडी एक त्रुटि
sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\'
किसी को भी मुझे फर्क यहां बता सकते हैं फेंकता लग रहा है? स्ट्रिंग्स एक जैसा दिखता है लेकिन अलग-अलग परिणाम देता है।
यह सिर्फ '/' s नहीं है, आपके पास बचने के लिए बहुत अधिक वर्ण हैं (उदाहरण के लिए 'वर्तमान में regexp में'। 'लेकिन sed उनमें से अधिकांश के लिए आपको एक त्रुटि संदेश नहीं देगा, यह' बस आपके आउटपुट को दूषित कर देगा। Http://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed/29626460#29626460 देखें। यदि आप सीखना चाहते हैं कि एक मजबूत स्ट्रिंग प्रतिस्थापन कैसे करें, तो एक नया प्रश्न पोस्ट करें (और उत्तर नहीं होगा क्योंकि sed seding का समर्थन नहीं करता है!)। –