脚本新手,只想在目录中的所有文件名中交换前两个单词,如下所示:
来自
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函数的正确方法。
答案 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