ファイル名の単語を変更して日付形式を再指定します。

ファイル名の単語を変更して日付形式を再指定します。

次のファイル名パターンを持つ複数の録音があります。

%year%month%day-%hour%minute%second__%phonenumber.amr

e.g.:
20190212-112007__+313206601234.amr

私は以下を得るために単語を変えたいと思います:

%phonenumber_%day-%month-%year_%hour-%minute-%second.amr

e.g.:
+313206601234__12-02-2019_11-20-07.amr

このユーティリティを使用できることはわかっていますが、その構文sedは古代言語と同じであるため、[0-9] and .2つの方法を置き換えるのは混乱しています。

答え1

キャプチャされた数値グループを使用し、目的の名前を取得したい場所にグループを配置することがすべてです。

sed -E 's/^([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{2})-([[:digit:]]{2})([[:digit:]]{2})([[:digit:]]{2})__(\+[[:digit:]]+)/\7__\3-\2-\1_\4-\5-\6/'
  • -EERE(拡張正規表現)を有効にする

  • [[:digit:]]ロケール認識番号の一致

  • {N}N前のトークンの数と一致します(たとえば[[:digit:]]{2}、2桁と一致)。これは範囲にすることもできます(たとえば、[[:digit:]]{2,4}2〜4桁に一致)。

例:

% sed -E 's/^([[:digit:]]{4})([[:digit:]]{2})([[:digit:]]{2})-([[:digit:]]{2})([[:digit:]]{2})([[:digit:]]{2})__(\+[[:digit:]]+)/\7__\3-\2-\1_\4-\5-\6/' <<<'20190212-112007__+313206601234.amr'
+313206601234__12-02-2019_11-20-07.amr

関連情報