ファイル名から特定の要素を抽出するには?

ファイル名から特定の要素を抽出するには?

次の形式のファイルがたくさんあります。

2014-11-19.8.ext
2014-11-26.1.ext
2014-11-26.2.blah.ext
2014-11-26_3.ext
2014-11-26.4.stuff_here.ext
2014-12-03.1. could be anything.ext
2014-12-032b.ext
2014-11-26 613 adva.ext

私の目標は、ファイルの全リストを繰り返して日付形式を取得し、それを処理するために変数にYYYY-MM-DD保存することです(私の場合はコマンドYYYYMMDDにプッシュされます)。touch

したがって、通常は次の正規表現と一致します。(\d{4})-(\d{2})-(\d{2}).*

次に、を使用して目的のパターンを取得しましたが、/でこれを行う$1$2$3方法がわかりません。bashzsh

シェルスクリプトでこれを行うにはどうすればよいですか?

ベストアンサー1

使用パラメータ拡張

$ touch 2014-11-19.8.ext 2014-11-26.1.ext
$ for f in *.ext; do d="${f:0:4}${f:5:2}${f:8:2}"; echo "$d"; done
20141119
20141126
  • ${f:0:4}変数名であるindexから始めて4文字を表します0f
  • echo "$d"あなたのコードに置き換えてください。

おすすめ記事