Encuentra subcadenas de una variedad de patrones

Encuentra subcadenas de una variedad de patrones

Tengo un archivo con extensiones:

f1=f1.e1.e2.e3.sh.pl.cpp

Tengo una matriz que contiene una lista de extensiones:

exts=(sh pl py)

Quiero eliminar las extensiones en exts del nombre de archivo. Hay algún truco para hacerlo, estoy pensando en algo de este tipo:

${f1%.${exts[@]}}

Obviamente no funciona.

Respuesta1

Construiría un patrón a partir de su extsmatriz y luego usaría sed:

f1=f1.e1.e2.e3.sh.pl.cpp
exts=(sh pl py)


function array_to_regex_alts() { # joins the array elements by \|
    echo -n "$1"; shift; printf "\|%s" "$@"
}

pattern="\.\($(array_to_regex_alts ${exts[@]} )\)"

echo $f1 | sed "s/$pattern//g"

información relacionada