別の質問では、ユーザー@Cyrusはhow to extract the dates from a filenameを説明しました。私はファイル名に他の数字のゴミが存在する可能性のあるファイルについて説明しなければなりません。Bashのファイル名から数字の塊だけを抽出する方法は?
一部のファイルにはプレフィックスが付いています。たとえば:のみの塊を抽出する方法はあり
for i in *; do
[[ $i =~ [0-9]{8}|[0-9]{4}-[0-9]{2}-[0-9]{2} ]]
x="${BASH_REMATCH[0]//-/}"
y="${x:0:4}"
m="${x:4:2}"
d="${x:6:2}"
echo "$y $m $d"
done | sort -n
:(下)
01 - Camera 03 - 20161231.mp4
02 - Camera 03 - 20161231.mp4
03 - Camera 03 - 20161231.mp4
彼のオリジナルの答えは、このゴミを持っていないファイル名を想定し、それを行う方法を示しています特定のパターンに適合するファイル名ですか?たとえば:
出力:
他の質問と同様にyyyyMMdd
yyyyMMddHHmmss
yyyy-MM-dd HH-mm-ss
、私の目標は、ごみ(接頭辞、非日付数値など)を無視してDATE部分から値を取得することです
2010 12 20 2016 01 01 2016 04 13 2017 01 11 2017 01 17 16 02 30
ありがとうございます。
あなたの質問にそのサンプル入力のサンプル出力を追加してください。 – Cyrus
最初に文字列をパターンに適合させて*分割*することはできませんでしたか?たとえば、 'parts = $(echo $ file | tr" "" \ n ")'のようにします。 –
bashパラメータの拡張にはいくつかのパターンマッチング修飾子があります。あなたはそれらを記述するマニュアルのセクションを見ましたか? https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion – Barmar