Suchen Sie in einem Array von Mustern nach einer Teilzeichenfolge

Suchen Sie in einem Array von Mustern nach einer Teilzeichenfolge

Ich habe eine Datei mit den Erweiterungen:

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

Ich habe ein Array, das eine Liste von Erweiterungen enthält:

exts=(sh pl py)

Ich möchte die Erweiterungen in exts aus den Dateinamen entfernen. Gibt es dafür einen Trick? Ich denke an so etwas:

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

Es funktioniert offensichtlich nicht.

Antwort1

extsIch würde aus Ihrem Array ein Muster erstellen und dann Folgendes verwenden 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"

verwandte Informationen