2016-02-23 5 views
1

Мне интересно, как заменить несколько шаблонов переменным расширением.Множественная замена расширения с переменным именем

VAR=A_B_C_D_E 

Результат Я хочу A_C_E без использования переменной TEMP.

RESULT_TMP=${VAR/_B/} 
RESULT=${RESULT_TMP/_D/} 

Я сделал некоторые суда, как это:

${${VAR/_B/}/_D/} 

без какого-либо успеха.

Любая идея?

ответ

4

Вы можете использовать этот шаблон в Glob BASH подстановки строк:

s='A_B_C_D_E' 
echo "${s//_[BD]/}" 
A_C_E 

_[BD] будет соответствовать _B или _D и // будет делать глобальную замену.


EDIT: По дополнительному вопросу:

, но в случае, когда B и D являются строками: A_FOO_C_BAR_E

Вы можете использовать extglob в этом случае:

shopt -s extglob 

s=`A_FOO_C_BAR_E` 
echo "${s//[email protected](FOO|BAR)/}" 
A_C_E 
+0

Хорошо, но в случае, если B и D - строки: A_FOO_C_BAR_E –

+1

Да :) Большое спасибо –