bash は文字列から部分文字列を削除します。

bash は文字列から部分文字列を削除します。

package-0.0.1.jarなどのパッケージ名があり、その文字列からバージョン情報と.jarで終わるファイルを削除する必要があります。この目標をどのように達成できますか? 「%」記号を使用して文字列の一部を切り取ることができることを発見しました。だから私は努力しました

JNAME="package-0.0.1.jar"
CLEAN="${JNAME%-.*\.jar}"

しかし、CLEANの後には完全なJNAMEコンテンツがあるので、これはうまくいかないようです。 %記号の後の正しい順序は何ですか?

答え1

%/ を使用した拡張は#正規表現を使用せず、シェルグローブを使用します。-*.jarバージョンとサフィックスを一致させるためにのみ使用されます。

CLEAN=${JNAME%-*.jar}

正規表現が必要な場合は、Bashの[[ a =~ b ]]合計を使用できます${BASH_REMATCH[…]}(この場合は必要ありませんが)。

if [[ $JNAME =~ ^(.+)-[^-]+\.jar$ ]]; then
    CLEAN=${BASH_REMATCH[1]}
fi

答え2

別のアプローチはこの目的のためのものですawk(名前がダッシュで終わりたいとします)。

CLEAN=$(printf '%s' "$JNAME" | awk -F- '{print $1}')

関連情報