データを抽出するファイル名は約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