次のファイル名パターンを持つ複数の録音があります。
%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/'
-E
ERE(拡張正規表現)を有効にする[[: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