我有几个带有这样的文件名模式的录音
%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