Bash重命名文件,删除特定字符串之间的随机字符串

时间:2016-04-25 14:35:56

标签: string bash file rename

我想重命名(在bash中)一个以特定字符串' foo'开头的文件列表,继续使用未指定长度的随机字符串' random1'并继续使用另一个已知字符串' bar'。基本上来自' foo_random1_bar_random2'我想要' foo_bar_random2'。我知道如何使用sed删除特定字符串,但不知道特定字符串之间未知长度的字符串。

3 个答案:

答案 0 :(得分:2)

for i in foo_*_bar_*
do
    j=$(echo "$i"|sed -e 's/foo_.*_bar_\(.*\)/foo_bar_\1/')
    echo mv "$i" "$j"
done

这显示了mv命令的列表。对命令感到满意后,请在echo之前移除mv,以便执行这些命令。

答案 1 :(得分:1)

使用BASH字符串替换:

f='foo_random1_bar_random2'
echo "${f/*bar/foo_bar}"

PS:根据下面的评论,如果在bar之前有下划线,那么最好使用:

echo "${f/*_bar/foo_bar}"

<强>输出:

foo_bar_random2

mv用作:

for f in foo_*bar_*; do
   mv -i "$f" "${f/*_bar/foo_bar}"
done

答案 2 :(得分:1)

如果您安装了rename工具,则可以执行此操作

rename 's/foo_.*_bar/foo_bar/' files