sed/echo の組み合わせを使用した配列の塗りつぶし

sed/echo の組み合わせを使用した配列の塗りつぶし

日付を含む複数のファイルの名前を変更しようとしています。日付を年、月、日に分割し、ディレクトリツリーにyear/month-year/filename_yearmonthday.extensionなどの新しいファイル名を作成したいと思います。

日付をフィルタリングして3つの別々の変数に書き換えるsed式を正常に作成しました。ここで、[0]が年、[1]が月、[2]が日である配列に値を挿入したいと思います。私は次の文を試しました。

#!/bin/bash
for i in *
do 
myarray=( $(echo ${i} |  \
  sed -n 's/.*\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*/\1 \2 \3/p' ) )
done

しかし、スクリプトは構文エラーについて文句を言います。 sed式を含む3行目に予期しない「(」があります(「完了」が予想されます)。

***修正日付の位置が変わり続けて文字列に分割できません。

これまで私はこのようなことをしたことがありません。

#!/bin/bash
myarray=(1 2 3 4)
echo ${myarray[@]}

配列を含む行では、常に「構文エラー:」(「予期しない(予期された「完了」)」)と表示されます。***END

コマンドラインから直接これを行うと機能します。助けてくれてありがとう。

ベストアンサー1

私は次のように配列をロードします。

#!/bin/bash

string="file_20160825_namegoeson"

myarray[0]="${string:5:4}"
myarray[1]="${string:9:2}"
myarray[2]="${string:11:2}"

echo "${myarray[0]}"
echo "${myarray[1]}"
echo "${myarray[2]}"

おすすめ記事