मैंने यह प्रक्रिया नहीं की कि यह एक सरणी में था और एक स्ट्रिंग में व्हाट्सएप-अलग होने के बारे में सोच रहा था। यह समाधान उस के साथ काम करेगा, लेकिन यह देखते हुए कि यह एक सरणी है, मैनटवर्क के समाधान ( @{my_array[@]/#/-}) के साथ जाएं ।
यह बहुत खराब नहीं है sedऔर एक उपधारा है। रेगेक्स कितना आसान है यह इस बात पर निर्भर करता है कि आप विकल्पों के बारे में क्या गारंटी दे सकते हैं। यदि विकल्प सभी एक "शब्द" ( a-zA-Z0-9केवल) हैं, तो एक सरल शुरुआत शब्द सीमा ( \<) पर्याप्त होगी:
command $(echo $my_array | sed 's/\</-/g') "$1"
यदि आपके विकल्पों में अन्य वर्ण हैं (सबसे अधिक संभावना है -), तो आपको कुछ अधिक जटिल की आवश्यकता होगी:
command $(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g') "$1"
^लाइन की शुरुआत से [ \t]मेल खाता है , एक स्थान या टैब से \|मेल खाता है , या तो पक्ष ( ^या [ \t]), \( \)समूहों (के लिए \|) से \<मेल खाता है और परिणाम को संग्रहीत करता है, एक शब्द की शुरुआत से मेल खाता है। \1पहले मैच को पैरेंस ( \(\)) से रख कर रिप्लेसमेंट शुरू करता है , और -निश्चित रूप से उस डैश को जोड़ता है जिसकी हमें जरूरत है।
ग्नू सेड के साथ ये काम, अगर वे आपके साथ काम नहीं करते हैं, तो मुझे बताएं।
और यदि आप एक ही चीज़ का कई बार उपयोग कर रहे हैं, तो आप बस एक बार उसकी गणना करके उसे स्टोर कर सकते हैं:
opts="$(echo $my_array | sed 's/\(^\|[ \t]\)\</\1-/g')"
...
command $opts "$1"
command $opts "$2"
-प्रत्येक शब्द की शुरुआत में जोड़ना चाहते हैंmy_array?