更好地用大括号替换多个

更好地用大括号替换多个

对于单个替换,花括号可以正常工作,
但我找不到多个替换的解决方案,诀窍在哪里?
或者
对于多个替换我使用 sed,对于单个替换我使用花括号方法

#example vars
addons="WEBIF_LIVELOG WEBIF_JQUERY TOUCH WITH_SSL READ_SDT_CHARSETS WITH_DEBUG MODULE_MONITOR"
protocols="MODULE_hans MODULE_paul MODULE_klaus MODULE_franz"
readers="READER_foo READER_bar READER_foobar READER_barfoo"
card_readers="CARDREADER_type1 CARDREADER_type2 CARDREADER_type3"

_create_module_arrays(){
i=0;
for e in $(echo "$addons" | sed 's/WEBIF_//g;s/WITH_//g;s/MODULE_//g;s/HAVE_//g;s/_CHARSETS//g;);
do
<------>SHORT_ADDONS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in ${protocols//MODULE_/};
do
<------>SHORT_PROTOCOLS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in ${readers//READER_/};
do
<------>SHORT_READERS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in ${card_readers//CARDREADER_/};
do
<------>SHORT_CARD_READERS+=($e);
<------>SHORT_MODULENAMES+=($e);
done;
for e in $addons $protocols $readers $card_readers;
do
<------>ALL_MODULES_LONG+=($e);
done;
for e in "${SHORT_MODULENAMES[@]}";
do
<------>INTERNAL_MODULES["$e"]="${ALL_MODULES_LONG[i]}";((i++));
done;
};

答案1

在bash中,如果你想删除这些模式,你可以使用扩展模式匹配:

# optional - save extglob state
$ shopt -q extglob && extglob_disabled=false || extglob_disabled=true

# enable extended pattern matching
$ shopt -s extglob

$ addons="WEBIF_LIVELOG WEBIF_JQUERY TOUCH WITH_SSL READ_SDT_CHARSETS WITH_DEBUG MODULE_MONITOR"
$ echo ${addons//@(WEBIF_|WITH_|MODULE_|HAVE_|_CHARSETS)}
LIVELOG JQUERY TOUCH SSL READ_SDT DEBUG MONITOR

# optional - restore extglob state
$ $extglob_disabled && shopt -u extglob

相关内容