交换文件名中的单词并重新格式化日期

交换文件名中的单词并重新格式化日期

我有几个带有这样的文件名模式的录音

%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 .进行替换感到困惑。

答案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

相关内容