指定された区切り文字でファイル名を分割する方法

指定された区切り文字でファイル名を分割する方法

データを抽出するファイル名は約200個あります。形式は次のとおりです。 filename(120516.1108).mp3 "(" 前部分と "." 前部分を取り出そうとします。) すべてのファイルがこの形式を持つわけではないため、追加の問題があります。

出力は「filename」「120516」でなければなりません。

可能であれば、bashでこれを行いたいと思います。私はまだ学んでおり、bashの経験はほとんどありません。すべての説明とコードを歓迎します。

答え1

「bashから」、例:

re='^(.*)\(([0-9]+)\.[0-9]+\).*$'

それから

for f in *.mp3; do 
  [[ $f =~ $re ]] && printf '"%s" "%s"\n' "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
done

答え2

私が正しく理解したら、このコマンドはうまくいくでしょう(ファイル名に「(」と「。」がない場合)。

data=$(echo $file | cut -d"." -f1 | tr -d "(")

これを2つの変数に分割します。

filename=$(echo $file | cut -d"(" -f1)
number=$(echo $file | cut -d"(" -f2 | cut -d"." -f1)

答え3

使用パラメータ拡張切りました。

case "$filename" in
  *\(*.*\)*)
    before_first_parenthesis=${filename%%\(*}
    after_first_parenthesis=${filename#*\(}
    before_dot=${after_first_parenthesis%%.*}
    echo "$before_first_parenthesis" "$before_dot"
  *) echo "does not match the format";;
esac

関連情報