如何使用bash在文件名中交换前2个单词

时间:2018-01-19 07:54:54

标签: linux bash

脚本新手,只想在目录中的所有文件名中交换前两个单词,如下所示:

来自

A-B-Model-011818.xml
X-Y-Model-011818.xml

B_A-Model-011818.xml
Y_X-Model-011818.xml

我从基本的awk函数开始并获得所需的输出

echo "A-B-Model-011818.xml" | awk -F'[-.]' '{print $2"_"$1"-"$3"-"$4".xml"}'

但要在bash中应用此技术(使用for循环以确保我找到所有.xml文件并重命名文件)没有帮助。

#!/usr/bin/env bash

    cd Current_Directory

    for FILE in *.xml; do
     # NEWNAME =  $(awk -F'[-.]' '{print $2"_"$1"-"$3"-"$4".xml"}')
       NEWNAME = sed 's/\(.\)-\(.\)/\2_\1/'
       mv "$FILE" "$NEWNAME"
    done

不确定这是否是在循环中使用sed或awk函数的正确方法。

2 个答案:

答案 0 :(得分:1)

使用 prename (Perl重命名)命令:

prename -n 's/^([A-Z])-([A-Z])(-.*\.xml)/$2-$1$3/' *.xml

(在确保流程按要求进行后删除-n选项)

答案 1 :(得分:0)

您可以通过sed

实现这一目标
echo "A-B-Model-011818.xml" | sed 's/\(.\)-\(.\)/\2_\1/'

结果:

B_A-Model-011818.xml